comparison gtk3/dw.c @ 2030:2cbbbc850b8d

GTK3: Fix deadlock when calling dw_messagebox() from HTML_RESULT event handler. It isn't clear to me why this is necessary but it fixed the deadlock so committing for now.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Thu, 14 Nov 2019 12:08:54 +0000
parents fb292c267f52
children 48b91f535f82
comparison
equal deleted inserted replaced
2029:10ca3e9d199f 2030:2cbbbc850b8d
1209 #endif 1209 #endif
1210 GError *error = NULL; 1210 GError *error = NULL;
1211 int (*htmlresultfunc)(HWND, int, char *, void *, void *) = NULL; 1211 int (*htmlresultfunc)(HWND, int, char *, void *, void *) = NULL;
1212 gint handlerdata = GPOINTER_TO_INT(g_object_get_data(object, "_dw_html_result_id")); 1212 gint handlerdata = GPOINTER_TO_INT(g_object_get_data(object, "_dw_html_result_id"));
1213 void *user_data = NULL; 1213 void *user_data = NULL;
1214 1214 pthread_t saved_thread = _dw_thread;
1215
1216 _dw_thread = (pthread_t)-1;
1215 if(handlerdata) 1217 if(handlerdata)
1216 { 1218 {
1217 SignalHandler work; 1219 SignalHandler work;
1218 void *params[3] = { GINT_TO_POINTER(handlerdata-1), 0, object }; 1220 void *params[3] = { GINT_TO_POINTER(handlerdata-1), 0, object };
1219 1221
1229 if(!(js_result = webkit_web_view_run_javascript_finish(WEBKIT_WEB_VIEW(object), result, &error))) 1231 if(!(js_result = webkit_web_view_run_javascript_finish(WEBKIT_WEB_VIEW(object), result, &error)))
1230 { 1232 {
1231 if(htmlresultfunc) 1233 if(htmlresultfunc)
1232 htmlresultfunc((HWND)object, DW_ERROR_UNKNOWN, error->message, user_data, script_data); 1234 htmlresultfunc((HWND)object, DW_ERROR_UNKNOWN, error->message, user_data, script_data);
1233 g_error_free (error); 1235 g_error_free (error);
1236 _dw_thread = saved_thread;
1234 return; 1237 return;
1235 } 1238 }
1236 1239
1237 #if WEBKIT_CHECK_VERSION(2, 22, 0) 1240 #if WEBKIT_CHECK_VERSION(2, 22, 0)
1238 value = webkit_javascript_result_get_js_value(js_result); 1241 value = webkit_javascript_result_get_js_value(js_result);
1269 } 1272 }
1270 else if(htmlresultfunc) 1273 else if(htmlresultfunc)
1271 htmlresultfunc((HWND)object, DW_ERROR_UNKNOWN, NULL, user_data, script_data); 1274 htmlresultfunc((HWND)object, DW_ERROR_UNKNOWN, NULL, user_data, script_data);
1272 webkit_javascript_result_unref (js_result); 1275 webkit_javascript_result_unref (js_result);
1273 #endif 1276 #endif
1277 _dw_thread = saved_thread;
1274 } 1278 }
1275 1279
1276 #ifdef USE_WEBKIT 1280 #ifdef USE_WEBKIT
1277 #ifdef USE_WEBKIT2 1281 #ifdef USE_WEBKIT2
1278 static void _html_changed_event(WebKitWebView *web_view, WebKitLoadEvent load_event, gpointer data) 1282 static void _html_changed_event(WebKitWebView *web_view, WebKitLoadEvent load_event, gpointer data)