[Spice-devel] [phodav PATCH 7/7 v3] spice-webdavd-windows: Dismount shared folder on service stop
Victor Toso
lists at victortoso.com
Thu Mar 24 09:34:45 UTC 2016
Hi,
On Thu, Mar 17, 2016 at 02:47:51PM +0100, Lukas Venhoda wrote:
> When stopping the service, automatically disconnect shared folder on
> windows. Not dismounting could lead to multiple shared folders.
But when user disconnect, the service is not stopped, correct? I think
we need some integration with spice-vdagent to be aware of when the
client disconnect in order to umount the shared folder.
That could be in a different bug but please file it upstream and
include this bits of information there.
> ---
> Changes since v2:
> - None
> Changes since v1:
> - New patch
> ---
> spice/spice-webdavd.c | 23 +++++++++++++++++++++++
> 1 file changed, 23 insertions(+)
>
> diff --git a/spice/spice-webdavd.c b/spice/spice-webdavd.c
> index 8f9b06b..c27cbbd 100644
> --- a/spice/spice-webdavd.c
> +++ b/spice/spice-webdavd.c
> @@ -835,6 +835,28 @@ map_drive(void)
> }
>
> static void
> +unmap_drive(void)
> +{
> + gchar local_name[3];
> + guint32 retval;
> +
> + local_name[0] = drive_letter;
> + local_name[1] = ':';
> + local_name[2] = 0;
> +
> + retval = WNetCancelConnection2(local_name, CONNECT_UPDATE_PROFILE, TRUE);
> +
> + if (retval == NO_ERROR)
> + g_debug ("unmap_drive ok");
> + else if (retval == ERROR_NOT_CONNECTED)
> + g_debug ("drive not connected");
Nothing should be done if we map the drive before but fail to unmap with
ERROR_NOT_CONNECTED ?
> + else
> + g_critical ("map_drive error %d", retval);
Also, in multiple if/else if please use braces.
> +
> + return;
> +}
> +
> +static void
> map_drive_cb(GTask *task,
> gpointer source_object,
> gpointer task_data,
> @@ -969,6 +991,7 @@ service_ctrl_handler (DWORD ctrl, DWORD type, LPVOID data, LPVOID ctx)
> {
> case SERVICE_CONTROL_STOP:
> case SERVICE_CONTROL_SHUTDOWN:
> + unmap_drive ();
As Pavel said, it does not seem you need drive_letter as global. You can
have it as userdata in the GTask and as argument for unmap_drive ()
> quit (SIGTERM);
> service_status.dwCurrentState = SERVICE_STOP_PENDING;
> SetServiceStatus (service_status_handle, &service_status);
> --
> 2.5.0
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
More information about the Spice-devel
mailing list