From fd5888552de164c4e325565dac92692331327dda Mon Sep 17 00:00:00 2001 From: Jean-Louis Dupond Date: Mon, 8 Oct 2012 23:40:58 +0200 Subject: plugins-rdp: fix crash when free'ing cursor (cherry picked from commit 74db2bbb342f3f2718e67a0a329e0c20672daed6) Conflicts: remmina-plugins/rdp/rdp_event.c remmina-plugins/rdp/rdp_graphics.c --- remmina-plugins/rdp/rdp_event.c | 13 ------------- remmina-plugins/rdp/rdp_plugin.c | 6 ++++++ remmina-plugins/rdp/rdp_plugin.h | 3 +++ 3 files changed, 9 insertions(+), 13 deletions(-) (limited to 'remmina-plugins/rdp') diff --git a/remmina-plugins/rdp/rdp_event.c b/remmina-plugins/rdp/rdp_event.c index 0b005b41e..fcb075ed6 100644 --- a/remmina-plugins/rdp/rdp_event.c +++ b/remmina-plugins/rdp/rdp_event.c @@ -691,19 +691,6 @@ static void remmina_rdp_event_update_cursor(RemminaProtocolWidget* gp, RemminaPl gdk_window_set_cursor(gtk_widget_get_window(rfi->drawing_area), cursor); } -static void remmina_rdp_event_create_cursor(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* ui) -{ - guchar* data; - GdkPixbuf* pixbuf; - rfContext* rfi = GET_DATA(gp); - rdpPointer* pointer = (rdpPointer*)ui->cursor.pointer; - - data = g_malloc0(pointer->width * pointer->height * 4); - freerdp_alpha_cursor_convert(data, pointer->xorMaskData, pointer->andMaskData, pointer->width, pointer->height, pointer->xorBpp, rfi->clrconv); - pixbuf = gdk_pixbuf_new_from_data(data, GDK_COLORSPACE_RGB, TRUE, 8, pointer->width, pointer->height, (pointer->width * 4), (GdkPixbufDestroyNotify) g_free, NULL); - ((rfPointer*)ui->cursor.pointer)->cursor = gdk_cursor_new_from_pixbuf(rfi->display, pixbuf, pointer->xPos, pointer->yPos); -} - gboolean remmina_rdp_event_queue_ui(RemminaProtocolWidget* gp) { rfContext* rfi; diff --git a/remmina-plugins/rdp/rdp_plugin.c b/remmina-plugins/rdp/rdp_plugin.c index 30b5a31d7..e4de34b47 100644 --- a/remmina-plugins/rdp/rdp_plugin.c +++ b/remmina-plugins/rdp/rdp_plugin.c @@ -823,6 +823,9 @@ static void remmina_rdp_init(RemminaProtocolWidget* gp) pthread_mutex_init(&rfi->mutex, NULL); + rfi->gmutex = g_mutex_new(); + rfi->gcond = g_cond_new(); + remmina_rdp_event_init(gp); } @@ -864,6 +867,9 @@ static gboolean remmina_rdp_close_connection(RemminaProtocolWidget* gp) pthread_mutex_destroy(&rfi->mutex); + g_mutex_free(rfi->gmutex); + g_cond_free(rfi->gcond); + remmina_rdp_event_uninit(gp); remmina_plugin_service->protocol_plugin_emit_signal(gp, "disconnect"); diff --git a/remmina-plugins/rdp/rdp_plugin.h b/remmina-plugins/rdp/rdp_plugin.h index 0d8e7ab91..3c7ec299a 100644 --- a/remmina-plugins/rdp/rdp_plugin.h +++ b/remmina-plugins/rdp/rdp_plugin.h @@ -83,6 +83,9 @@ struct rf_context gboolean scale; gboolean user_cancelled; + GMutex* gmutex; + GCond* gcond; + RDP_PLUGIN_DATA rdpdr_data[5]; RDP_PLUGIN_DATA drdynvc_data[5]; RDP_PLUGIN_DATA rdpsnd_data[5]; -- cgit v1.2.3