I kid you not: With the attached diff, everything works correctly for "iMovie Theater" too. I don't really grok python. but the param and appletv settings turn out empty/None in the XMLConverter inside the SSL server.
Ok. It was simpler than it sounded:
Process() creates actual processes (duh!) thru fork(), so the changes to the globals performed inside WebServer.Run() don't carry over to WebServer.Run_SSL().
Question is "how it ever worked before"? Even better question "Why does it work for Trailers"?
Example code:
#!/usr/bin/python
from time import sleep
from multiprocessing import Process
v=‘not changed’
def process_1():
global v
v=‘changed’
print “process_1 V: %s” % repr(v)
sleep(15)
def process_2():
global v
print "process_2 V: %s" % repr(v)
sleep(15)
print “create process 1”
proc1 = Process(target=process_1)
proc1.start()
sleep(5)
print “create process 2”
proc2 = Process(target=process_2)
proc2.start()
sleep(5)
print “waiting…”
proc1.join()
proc2.join()
print “done”
This patch changes from Process() to Thread() and everything works fine with iMovie Theater.
diff --git a/PlexConnect.py b/PlexConnect.py
index 6a179f3..5391898 100755
--- a/PlexConnect.py
+++ b/PlexConnect.py
@@ -11,7 +11,8 @@ inter-process-communication (queue): http://pymotw.com/2/multiprocessing/communi
import sys, time
from os import sep
import socket
-from multiprocessing import Process, Pipe
+from multiprocessing import Pipe
+from threading import Thread
import signal, errno
from Version import __VERSION__
@@ -79,7 +80,7 @@ def startup():
# init DNSServer
if cfg.getSetting('enable_dnsserver')=='True':
master, slave = Pipe() # endpoint [0]-PlexConnect, [1]-DNSServer
- proc = Process(target=DNSServer.Run, args=(slave, param))
+ proc = Thread(target=DNSServer.Run, args=(slave, param))
proc.start()
time.sleep(0.1)
@@ -93,7 +94,7 @@ def startup():
# init WebServer
if running:
master, slave = Pipe() # endpoint [0]-PlexConnect, [1]-WebServer
- proc = Process(target=WebServer.Run, args=(slave, param))
+ proc = Thread(target=WebServer.Run, args=(slave, param))
proc.start()
time.sleep(0.1)
@@ -108,7 +109,7 @@ def startup():
if running and \
cfg.getSetting('enable_webserver_ssl')=='True':
master, slave = Pipe() # endpoint [0]-PlexConnect, [1]-WebServer
- proc = Process(target=WebServer.Run_SSL, args=(slave, param))
+ proc = Thread(target=WebServer.Run_SSL, args=(slave, param))
proc.start()
time.sleep(0.1)
diff --git a/WebServer.py b/WebServer.py
index fcbfcb8..7b3746f 100755
--- a/WebServer.py
+++ b/WebServer.py
@@ -21,7 +21,6 @@ from SocketServer import ThreadingMixIn
import ssl
from multiprocessing import Pipe # inter process communication
import urllib
-import signal
import Settings, ATVSettings
from Debug import * # dprint()
@@ -240,9 +239,6 @@ class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
def Run(cmdPipe, param):
- if not __name__ == '__main__':
- signal.signal(signal.SIGINT, signal.SIG_IGN)
-
dinit(__name__, param) # init logging, WebServer process
cfg_IP_WebServer = param['IP_self']
@@ -277,7 +273,6 @@ def Run(cmdPipe, param):
server.handle_request()
except KeyboardInterrupt:
- signal.signal(signal.SIGINT, signal.SIG_IGN) # we heard you!
dprint(__name__, 0,"^C received.")
finally:
dprint(__name__, 0, "Shutting down.")
@@ -288,9 +283,6 @@ def Run(cmdPipe, param):
def Run_SSL(cmdPipe, param):
- if not __name__ == '__main__':
- signal.signal(signal.SIGINT, signal.SIG_IGN)
-
dinit(__name__, param) # init logging, WebServer process
cfg_IP_WebServer = param['IP_self']
@@ -339,7 +331,6 @@ def Run_SSL(cmdPipe, param):
server.handle_request()
except KeyboardInterrupt:
- signal.signal(signal.SIGINT, signal.SIG_IGN) # we heard you!
dprint(__name__, 0,"^C received.")
finally:
dprint(__name__, 0, "Shutting down.")