From fad576295ed101c746dfdf57d1fe551cdb1d4dd5 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Tue, 9 Jul 2013 12:18:37 +0900 Subject: [PATCH] somehow buf is freed once its put into an event.. but before event is processed. don't allow this. --- src/lib/ecore_ipc/ecore_ipc.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/lib/ecore_ipc/ecore_ipc.c b/src/lib/ecore_ipc/ecore_ipc.c index 9b0efc3a88..5dfb636f67 100644 --- a/src/lib/ecore_ipc/ecore_ipc.c +++ b/src/lib/ecore_ipc/ecore_ipc.c @@ -1492,6 +1492,12 @@ _ecore_ipc_event_server_data(void *data EINA_UNUSED, int ev_type EINA_UNUSED, vo e2->response = msg.response; e2->size = msg.size; e2->data = buf; + if (buf == svr->buf) + { + svr->buf = NULL; + svr->buf_size = 0; + } + buf = NULL; ecore_event_add(ECORE_IPC_EVENT_SERVER_DATA, e2, _ecore_ipc_event_server_data_free, NULL); @@ -1500,9 +1506,9 @@ _ecore_ipc_event_server_data(void *data EINA_UNUSED, int ev_type EINA_UNUSED, vo } svr->prev.i = msg; offset += (s + msg.size); - if (svr->buf_size == offset) + if ((svr->buf_size == offset) && ((svr->buf) || (buf))) { - free(svr->buf); + if (svr->buf) free(svr->buf); svr->buf = NULL; svr->buf_size = 0; if (buf) free(buf);