--- a/mpd2src/scmakempdsender
+++ b/mpd2src/scmakempdsender
@@ -51,6 +51,9 @@
# the node name
upmpdcli_fname = "UpMpd"
+def logerr(s):
+ print("%s" % s, file=sys.stderr)
+
args = sys.argv[1:]
opts, args = getopt.getopt(args, "hup:f:e")
for opt, arg in opts:
@@ -65,7 +68,7 @@
elif opt in ['-e']:
externalvolume = True
else:
- print("unknown option %s\n"%opt, file=sys.stderr)
+ logerr("unknown option %s\n" % opt)
usage(sys.stderr)
# Temp fifo name and temporary file for mpd configuration
@@ -81,6 +84,8 @@
mpdproc = None
senderproc = None
upmpdproc = None
+
+parentpid = os.getppid()
def cleanup(xval):
# Clean up
@@ -143,7 +148,7 @@
mpdproc = subprocess.Popen(["mpd", "--no-daemon", "--stderr", mpdconf.name],
bufsize = -1)
except Exception as err:
- print("Can't start mpd: %s"%(err,), file=sys.stderr)
+ logerr("Can't start mpd: %s" % err)
cleanup(1)
# Wait for the fifo to appear
@@ -162,7 +167,7 @@
stdout=subprocess.PIPE,
bufsize = -1)
except Exception as err:
- print("Can't start %s: %s"%(uxsender, err), file=sys.stderr)
+ logerr("Can't start %s: %s" % (uxsender, err))
cleanup(1)
# Get the Uri and Metadata values from the sender. These get written to stdout
@@ -178,17 +183,21 @@
"-p", "%d"%mpdport,
"-f", upname], bufsize = -1)
except Exception as err:
- print("Can't start upmpdcli: %s"%(err,), file=sys.stderr)
+ logerr("Can't start upmpdcli: %s" % err)
cleanup(1)
# Tell the world we're set
print("Ok %d %s" % (mpdport, urimeta))
sys.stdout.flush()
-# Wait for either process.
+# Wait for either process, also checking that our parent is not dead
while True:
if mpdproc.poll() is not None or senderproc.poll() is not None:
break
+ try:
+ os.kill(parentpid, 0)
+ except:
+ break
time.sleep(0.5)
time.sleep(1)