Skip to content

Commit 52c1777

Browse files
committed
Mutex WebView Loop (Linux and macOS)
1 parent 3734f9f commit 52c1777

File tree

1 file changed

+52
-56
lines changed

1 file changed

+52
-56
lines changed

src/webui.c

Lines changed: 52 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -5223,6 +5223,10 @@ static bool _webui_mutex_is_webview_update(_webui_window_t* win, int update) {
52235223

52245224
static void _webui_webview_update(_webui_window_t* win) {
52255225

5226+
#ifdef WEBUI_LOG
5227+
printf("[Core]\t\t_webui_webview_update(%zu)\n", win->num);
5228+
#endif
5229+
52265230
#ifdef _WIN32
52275231
// Windows - WebView2
52285232
_webui_mutex_is_webview_update(win, WEBUI_MUTEX_SET_TRUE);
@@ -11588,38 +11592,34 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) {
1158811592

1158911593
while (true) {
1159011594

11591-
// Check if there is any WebUI Messages
11595+
// Wait for WebUI Messages
1159211596

11593-
if (_webui_mutex_is_webview_update(win, WEBUI_MUTEX_GET_STATUS)) {
11594-
_webui_mutex_is_webview_update(win, WEBUI_MUTEX_SET_FALSE);
11595-
if (win->webView) {
11596-
// Stop this thread
11597-
if (win->webView->stop) {
11598-
break;
11599-
}
11600-
// Window Size
11601-
if (win->webView->size) {
11602-
win->webView->size = false;
11603-
_webui_wv_set_size(win->webView, win->webView->width, win->webView->height);
11604-
}
11605-
// Window Position
11606-
if (win->webView->position) {
11607-
win->webView->position = false;
11608-
_webui_wv_set_position(win->webView, win->webView->x, win->webView->y);
11609-
}
11610-
// Navigation
11611-
if (win->webView->navigate) {
11612-
win->webView->navigate = false;
11613-
_webui_wv_navigate(win->webView, win->webView->url);
11614-
}
11597+
_webui_mutex_lock(&win->mutex_webview_update);
11598+
_webui_condition_wait(&win->condition_webview_update, &win->mutex_webview_update);
11599+
11600+
if (win->webView) {
11601+
// Stop this thread
11602+
if (win->webView->stop) {
11603+
break;
11604+
}
11605+
// Window Size
11606+
if (win->webView->size) {
11607+
win->webView->size = false;
11608+
_webui_wv_set_size(win->webView, win->webView->width, win->webView->height);
11609+
}
11610+
// Window Position
11611+
if (win->webView->position) {
11612+
win->webView->position = false;
11613+
_webui_wv_set_position(win->webView, win->webView->x, win->webView->y);
11614+
}
11615+
// Navigation
11616+
if (win->webView->navigate) {
11617+
win->webView->navigate = false;
11618+
_webui_wv_navigate(win->webView, win->webView->url);
1161511619
}
1161611620
}
11617-
else {
1161811621

11619-
// At this moment, there is no WebUI messages
11620-
// let's IDLE for 250ms in this current thread.
11621-
_webui_sleep(250);
11622-
}
11622+
_webui_mutex_unlock(&win->mutex_webview_update);
1162311623
}
1162411624
}
1162511625

@@ -11813,37 +11813,33 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) {
1181311813

1181411814
// Check if there is any WebUI Messages
1181511815

11816-
if (_webui_mutex_is_webview_update(win, WEBUI_MUTEX_GET_STATUS)) {
11817-
_webui_mutex_is_webview_update(win, WEBUI_MUTEX_SET_FALSE);
11818-
if (win->webView) {
11819-
// Stop this thread
11820-
if (win->webView->stop) {
11821-
_webui_macos_wv_close(win->webView->index);
11822-
break;
11823-
}
11824-
// Window Size
11825-
if (win->webView->size) {
11826-
win->webView->size = false;
11827-
_webui_wv_set_size(win->webView, win->webView->width, win->webView->height);
11828-
}
11829-
// Window Position
11830-
if (win->webView->position) {
11831-
win->webView->position = false;
11832-
_webui_wv_set_position(win->webView, win->webView->x, win->webView->y);
11833-
}
11834-
// Navigation
11835-
if (win->webView->navigate) {
11836-
win->webView->navigate = false;
11837-
_webui_wv_navigate(win->webView, win->webView->url);
11838-
}
11816+
_webui_mutex_lock(&win->mutex_webview_update);
11817+
_webui_condition_wait(&win->condition_webview_update, &win->mutex_webview_update);
11818+
11819+
if (win->webView) {
11820+
// Stop this thread
11821+
if (win->webView->stop) {
11822+
_webui_macos_wv_close(win->webView->index);
11823+
break;
11824+
}
11825+
// Window Size
11826+
if (win->webView->size) {
11827+
win->webView->size = false;
11828+
_webui_wv_set_size(win->webView, win->webView->width, win->webView->height);
11829+
}
11830+
// Window Position
11831+
if (win->webView->position) {
11832+
win->webView->position = false;
11833+
_webui_wv_set_position(win->webView, win->webView->x, win->webView->y);
11834+
}
11835+
// Navigation
11836+
if (win->webView->navigate) {
11837+
win->webView->navigate = false;
11838+
_webui_wv_navigate(win->webView, win->webView->url);
1183911839
}
1184011840
}
11841-
else {
1184211841

11843-
// At this moment, there is no WebUI messages
11844-
// let's IDLE for 250ms in this current thread.
11845-
_webui_sleep(250);
11846-
}
11842+
_webui_mutex_unlock(&win->mutex_webview_update);
1184711843
}
1184811844
}
1184911845

0 commit comments

Comments
 (0)