Merge remote-tracking branch 'origin/bug_671_python_update'
authorghost <andreas.monzner@multimedia-labs.de>
Tue, 13 Sep 2011 08:55:04 +0000 (10:55 +0200)
committerghost <andreas.monzner@multimedia-labs.de>
Tue, 13 Sep 2011 08:55:04 +0000 (10:55 +0200)
lib/python/Plugins/SystemPlugins/Hotplug/plugin.py

index 84cbbcb62d605790db46280ec427e6f9c41abe1c..e26a93c60bf44f1bff63a3310c4503a968263eae 100644 (file)
@@ -50,12 +50,12 @@ IOC_TYPESHIFT = (IOC_NRSHIFT+IOC_NRBITS)
 BLKRRPART = ((0x12<<IOC_TYPESHIFT) | (95<<IOC_NRSHIFT))
 
 def autostart(reason, **kwargs):
+       global bdpoll
        if reason == 0:
                print "starting hotplug handler"
 
                if fileExists('/dev/.udev'):
                        global netlink
-                       global bdpoll
                        from enigma import eSocketNotifier, eTimer, ePythonMessagePump
                        import socket
                        from select import POLLIN, POLLPRI
@@ -256,6 +256,8 @@ def autostart(reason, **kwargs):
                                        self.__lock.release()
 
                        netlink = Netlink()
+                       if bdpoll is not None:
+                               bdpoll.running = False
                        bdpoll = BDPoll()
                        for blockdev, removable, is_cdrom, medium_found in harddiskmanager.devices_scanned_on_init:
                                if removable or is_cdrom:
@@ -295,6 +297,12 @@ def autostart(reason, **kwargs):
                        factory = Factory()
                        factory.protocol = Hotplug
                        reactor.listenUNIX("/tmp/hotplug.socket", factory)
+       else:
+               if bdpoll:
+                       bdpoll.running = False
+                       bdpoll.timeout() # XXX: I assume the timer is shut down before it executes again, so release the semaphore manually
+                       bdpoll.join()
+               bdpoll = None
 
 def Plugins(**kwargs):
        return PluginDescriptor(name = "Hotplug", description = "listens to hotplug events", where = PluginDescriptor.WHERE_AUTOSTART, needsRestart = True, fnc = autostart)