Linux device drivers: Fix udisks based ejecting for devices with multiple nodes

This commit is contained in:
Kovid Goyal 2010-10-19 17:19:54 -06:00
parent 2bd9f63f29
commit 8b0b1312e3
2 changed files with 32 additions and 29 deletions

View File

@ -5,8 +5,7 @@ __license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en'
import dbus
import os
import dbus, os
def node_mountpoint(node):
@ -56,15 +55,6 @@ class UDisks(object):
parent = device_node_path
while parent[-1] in '0123456789':
parent = parent[:-1]
devices = [str(x) for x in self.main.EnumerateDeviceFiles()]
for d in devices:
if d.startswith(parent) and d != parent:
try:
self.unmount(d)
except:
import traceback
print 'Failed to unmount:', d
traceback.print_exc()
d = self.device(parent)
d.DriveEject([])
@ -76,13 +66,19 @@ def eject(node_path):
u = UDisks()
u.eject(node_path)
def umount(node_path):
u = UDisks()
u.unmount(node_path)
if __name__ == '__main__':
import sys
dev = sys.argv[1]
print 'Testing with node', dev
u = UDisks()
print 'Mounted at:', u.mount(dev)
print 'Ejecting'
print 'Unmounting'
u.unmount(dev)
print 'Ejecting:'
u.eject(dev)

View File

@ -733,14 +733,21 @@ class Device(DeviceConfig, DevicePlugin):
pass
def eject_linux(self):
from calibre.devices.udisks import eject, umount
drives = [d for d in self.find_device_nodes() if d]
for d in drives:
try:
from calibre.devices.udisks import eject
return eject(self._linux_main_device_node)
umount(d)
except:
pass
drives = self.find_device_nodes()
for d in drives:
try:
eject(d)
except Exception, e:
print 'Udisks eject call for:', d, 'failed:'
print '\t', str(e)
for drive in drives:
if drive:
cmd = 'calibre-mount-helper'
if getattr(sys, 'frozen_path', False):
cmd = os.path.join(sys.frozen_path, cmd)