Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/Remmina/Remmina.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Louis Dupond <jean-louis@dupond.be>2012-10-09 01:40:58 +0400
committerRene Rheaume <rene.rheaume@gmail.com>2014-03-15 14:14:19 +0400
commitfd5888552de164c4e325565dac92692331327dda (patch)
treee86200809604977c21d367c303b825cfa0456065 /remmina-plugins/rdp
parent71b61cab360de660cdeb5ecbb6af9808da170eff (diff)
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
Diffstat (limited to 'remmina-plugins/rdp')
-rw-r--r--remmina-plugins/rdp/rdp_event.c13
-rw-r--r--remmina-plugins/rdp/rdp_plugin.c6
-rw-r--r--remmina-plugins/rdp/rdp_plugin.h3
3 files changed, 9 insertions, 13 deletions
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];