Reintroduce the changes made by changeset 7455:021324804fbd, which were

disabled by workaround 7468:17a9f111fa93.  We additionally need to set the
FD_CLOEXEC flag on the status fd given to SrvServer when spawning the network
script, as at least on some platforms this causes xend to fail to start
properly.

Signed-off-by: Ewan Mellor <ewan@xensource.com>
This commit is contained in:
emellor@leeni.uk.xensource.com committed 2005-10-22 11:04:45 +01:00
1 parent 55179ce8a5
commit bacb111591
3 files changed
+8 -43

No files matched your search

-39
View File
@@ -1,39 +0,0 @@
# Copyright (C) 2005 Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
# os.system() replacement which outputs through the logger
import popen2
import select
import string
from xen.xend.XendLogging import log
def runscript(cmd):
# split after first space, then grab last component of path
cmdname = "[%s] " % cmd.split()[0].split('/')[-1]
# run command and grab stdin, stdout and stderr
cout, cin, cerr = popen2.popen3(cmd)
# close stdin to get command to terminate if it waits for input
cin.close()
# wait for output and process
p = select.poll()
p.register(cout)
p.register(cerr)
stdout = ""
while True:
r = p.poll()
for (fd, event) in r:
if event == select.POLLHUP:
cout.close()
cerr.close()
return stdout
if fd == cout.fileno():
stdout = stdout + cout.readline()
if fd == cerr.fileno():
l = cerr.readline()
if l[0] == '-':
log.debug(cmdname + l[1:].rstrip())
elif l[0] == '*':
log.info(cmdname + l[1:].rstrip())
else:
log.error(cmdname + l.rstrip())
+2 -4
View File
@@ -20,9 +20,9 @@
"""
import os
import xen.util.process
import XendRoot
def network(op):
"""Call a network control script.
@@ -32,6 +32,4 @@ def network(op):
raise ValueError('Invalid operation: ' + op)
script = XendRoot.instance().get_network_script()
if script:
xen.util.process.runscript(script + " " + op)
#os.spawnl(os.P_WAIT, script, script, op)
os.spawnl(os.P_WAIT, script, script, op)
@@ -39,6 +39,7 @@
# todo Support security settings etc. in the config file.
# todo Support command-line args.
import fcntl
from threading import Thread
from xen.web.httpserver import HttpServer, UnixHttpServer
@@ -64,6 +65,11 @@ class XendServers:
self.servers.append(server)
def start(self, status):
# Running the network script will spawn another process, which takes
# the status fd with it unless we set FD_CLOEXEC. Failing to do this
# causes the read in SrvDaemon to hang even when we have written here.
fcntl.fcntl(status, fcntl.F_SETFD, fcntl.FD_CLOEXEC)
Vifctl.network('start')
threads = []
for server in self.servers:
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.