mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-03-03 06:32:10 +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>
|
||||
|
||||
Bug 575708 - runaway inotify madness ...
|
||||
|
@ -242,6 +242,7 @@ typedef struct {
|
||||
GIOChannel *error_channel;
|
||||
guint error_channel_source_id;
|
||||
GString *error_string;
|
||||
gchar **argv;
|
||||
} UnmountEjectOp;
|
||||
|
||||
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_io_channel_unref (data->error_channel);
|
||||
g_string_free (data->error_string, TRUE);
|
||||
g_strfreev (data->argv);
|
||||
close (data->error_fd);
|
||||
g_spawn_close_pid (pid);
|
||||
g_free (data);
|
||||
@ -316,27 +318,15 @@ read:
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
eject_unmount_do (GMount *mount,
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data,
|
||||
char **argv)
|
||||
static gboolean
|
||||
eject_unmount_do_cb (gpointer user_data)
|
||||
{
|
||||
GUnixMount *unix_mount = G_UNIX_MOUNT (mount);
|
||||
UnmountEjectOp *data;
|
||||
UnmountEjectOp *data = (UnmountEjectOp *) user_data;
|
||||
GPid child_pid;
|
||||
GError *error;
|
||||
|
||||
data = g_new0 (UnmountEjectOp, 1);
|
||||
data->unix_mount = unix_mount;
|
||||
data->callback = callback;
|
||||
data->user_data = user_data;
|
||||
data->cancellable = cancellable;
|
||||
|
||||
error = NULL;
|
||||
GError *error = NULL;
|
||||
|
||||
if (!g_spawn_async_with_pipes (NULL, /* working dir */
|
||||
argv,
|
||||
data->argv,
|
||||
NULL, /* envp */
|
||||
G_SPAWN_DO_NOT_REAP_CHILD|G_SPAWN_SEARCH_PATH,
|
||||
NULL, /* child_setup */
|
||||
@ -376,9 +366,35 @@ handle_error:
|
||||
if (data->error_channel != NULL)
|
||||
g_io_channel_unref (data->error_channel);
|
||||
|
||||
g_strfreev (data->argv);
|
||||
g_error_free (error);
|
||||
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
|
||||
|
Loading…
x
Reference in New Issue
Block a user