Mercurial > dwindows
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) |