Add DeviceBlocked signal for storage callback
[platform/core/system/libstorage.git] / src / storage-external-dbus.c
index bf032b1..626feb9 100755 (executable)
@@ -36,6 +36,7 @@
 #define STORAGE_EXT_DEVICE_CHANGED "DeviceChanged"
 #define STORAGE_EXT_DEVICE_ADDED   "DeviceAdded"
 #define STORAGE_EXT_DEVICE_REMOVED "DeviceRemoved"
+#define STORAGE_EXT_DEVICE_BLOCKED "DeviceBlocked"
 
 #define DBUS_REPLY_TIMEOUT (-1)
 
@@ -240,6 +241,12 @@ static void storage_ext_device_changed(GVariant *params, enum storage_ext_state
                        &dev->flags,
                        &dev->storage_id);
 
+       /* Callback is called when unmount is started(DeviceBlocked signal) */
+       if (state == STORAGE_EXT_CHANGED && dev->state == STORAGE_EXT_UNMOUNTED) {
+               storage_ext_release_device(&dev);
+               return;
+       }
+
        DD_LIST_FOREACH(changed_list, elem, callback) {
                if (!callback->func)
                        continue;
@@ -282,6 +289,9 @@ static void storage_ext_changed(GDBusConnection *conn,
        else if (!strncmp(signal, STORAGE_EXT_DEVICE_REMOVED, signal_len))
                state = STORAGE_EXT_REMOVED;
 
+       else if (!strncmp(signal, STORAGE_EXT_DEVICE_BLOCKED, signal_len))
+               state = STORAGE_EXT_BLOCKED;
+
        else
                return;