diff options
author | kraxel <kraxel> | 2007-02-08 13:00:46 +0000 |
---|---|---|
committer | kraxel <kraxel> | 2007-02-08 13:00:46 +0000 |
commit | 1be051ab8eb54beefa29c0a3394367f00f293070 (patch) | |
tree | d69a97fa8656061ef10e3a4c8ed9630885aec6f3 | |
parent | 2eb0fefb223dc0f9d04bed54b8e5e1979015f877 (diff) | |
download | xenwatch-1be051ab8eb54beefa29c0a3394367f00f293070.tar.gz |
close socket
-rw-r--r-- | vnc.c | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -159,11 +159,19 @@ static void vnc_window_conf(struct vnc_window *vnc) static void vnc_release(struct vnc_window *vnc) { + int sock = -1; + if (NULL == vnc) return; - if (vnc->connected) { - if (vnc->client) - rfbClientCleanup(vnc->client); + if (vnc->connected && vnc->client) { + /* + * library bugs? + * - calling rfbClientCleanup() unconnected segfaults + * - rfbClientCleanup() doesn't close the socket + */ + sock = vnc->client->sock; + rfbClientCleanup(vnc->client); + vnc->client = NULL; } if (vnc->filter_installed) gdk_window_remove_filter(vnc->draw->window, event_filter, vnc); @@ -174,6 +182,8 @@ static void vnc_release(struct vnc_window *vnc) x11_destroy_ximage(vnc->dpy, vnc->ximage, vnc->shm); if (vnc->gc) XFreeGC(vnc->dpy, vnc->gc); + if (-1 != sock) + close(sock); free(vnc); } |