mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-03-03 22:52:09 +01:00
Bug 575270 – GVolumeMonitor::mount-pre-unmount not being emitted
2009-03-26 Carlos Garnacho <carlosg@gnome.org> Bug 575270 – GVolumeMonitor::mount-pre-unmount not being emitted * gunixmount.c (eject_unmount_cb) (eject_unmount_do_cb) (eject_unmount_do): Emit ::mount-pre-unmount and wait 500msec before actually trying to unmount. svn path=/trunk/; revision=8020
This commit is contained in:
parent
3476bfe846
commit
dabbea65c6
@ -1,3 +1,11 @@
|
|||||||
|
2009-03-26 Carlos Garnacho <carlosg@gnome.org>
|
||||||
|
|
||||||
|
Bug 575270 – GVolumeMonitor::mount-pre-unmount not being emitted
|
||||||
|
|
||||||
|
* gunixmount.c (eject_unmount_cb) (eject_unmount_do_cb)
|
||||||
|
(eject_unmount_do): Emit ::mount-pre-unmount and wait 500msec before
|
||||||
|
actually trying to unmount.
|
||||||
|
|
||||||
2009-03-17 Colin Walters <walters@redhat.com>
|
2009-03-17 Colin Walters <walters@redhat.com>
|
||||||
|
|
||||||
Bug 575708 - runaway inotify madness ...
|
Bug 575708 - runaway inotify madness ...
|
||||||
|
@ -242,6 +242,7 @@ typedef struct {
|
|||||||
GIOChannel *error_channel;
|
GIOChannel *error_channel;
|
||||||
guint error_channel_source_id;
|
guint error_channel_source_id;
|
||||||
GString *error_string;
|
GString *error_string;
|
||||||
|
gchar **argv;
|
||||||
} UnmountEjectOp;
|
} UnmountEjectOp;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -276,6 +277,7 @@ eject_unmount_cb (GPid pid, gint status, gpointer user_data)
|
|||||||
g_source_remove (data->error_channel_source_id);
|
g_source_remove (data->error_channel_source_id);
|
||||||
g_io_channel_unref (data->error_channel);
|
g_io_channel_unref (data->error_channel);
|
||||||
g_string_free (data->error_string, TRUE);
|
g_string_free (data->error_string, TRUE);
|
||||||
|
g_strfreev (data->argv);
|
||||||
close (data->error_fd);
|
close (data->error_fd);
|
||||||
g_spawn_close_pid (pid);
|
g_spawn_close_pid (pid);
|
||||||
g_free (data);
|
g_free (data);
|
||||||
@ -316,27 +318,15 @@ read:
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static gboolean
|
||||||
eject_unmount_do (GMount *mount,
|
eject_unmount_do_cb (gpointer user_data)
|
||||||
GCancellable *cancellable,
|
|
||||||
GAsyncReadyCallback callback,
|
|
||||||
gpointer user_data,
|
|
||||||
char **argv)
|
|
||||||
{
|
{
|
||||||
GUnixMount *unix_mount = G_UNIX_MOUNT (mount);
|
UnmountEjectOp *data = (UnmountEjectOp *) user_data;
|
||||||
UnmountEjectOp *data;
|
|
||||||
GPid child_pid;
|
GPid child_pid;
|
||||||
GError *error;
|
GError *error = NULL;
|
||||||
|
|
||||||
data = g_new0 (UnmountEjectOp, 1);
|
|
||||||
data->unix_mount = unix_mount;
|
|
||||||
data->callback = callback;
|
|
||||||
data->user_data = user_data;
|
|
||||||
data->cancellable = cancellable;
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
if (!g_spawn_async_with_pipes (NULL, /* working dir */
|
if (!g_spawn_async_with_pipes (NULL, /* working dir */
|
||||||
argv,
|
data->argv,
|
||||||
NULL, /* envp */
|
NULL, /* envp */
|
||||||
G_SPAWN_DO_NOT_REAP_CHILD|G_SPAWN_SEARCH_PATH,
|
G_SPAWN_DO_NOT_REAP_CHILD|G_SPAWN_SEARCH_PATH,
|
||||||
NULL, /* child_setup */
|
NULL, /* child_setup */
|
||||||
@ -376,9 +366,35 @@ handle_error:
|
|||||||
if (data->error_channel != NULL)
|
if (data->error_channel != NULL)
|
||||||
g_io_channel_unref (data->error_channel);
|
g_io_channel_unref (data->error_channel);
|
||||||
|
|
||||||
|
g_strfreev (data->argv);
|
||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
g_free (data);
|
g_free (data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
eject_unmount_do (GMount *mount,
|
||||||
|
GCancellable *cancellable,
|
||||||
|
GAsyncReadyCallback callback,
|
||||||
|
gpointer user_data,
|
||||||
|
char **argv)
|
||||||
|
{
|
||||||
|
GUnixMount *unix_mount = G_UNIX_MOUNT (mount);
|
||||||
|
UnmountEjectOp *data;
|
||||||
|
|
||||||
|
data = g_new0 (UnmountEjectOp, 1);
|
||||||
|
data->unix_mount = unix_mount;
|
||||||
|
data->callback = callback;
|
||||||
|
data->user_data = user_data;
|
||||||
|
data->cancellable = cancellable;
|
||||||
|
data->argv = g_strdupv (argv);
|
||||||
|
|
||||||
|
if (unix_mount->volume_monitor != NULL)
|
||||||
|
g_signal_emit_by_name (unix_mount->volume_monitor, "mount-pre-unmount", mount);
|
||||||
|
|
||||||
|
g_timeout_add (500, (GSourceFunc) eject_unmount_do_cb, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user