Commit Diff


commit - eb89db648e0a82e2d370c28a8725f8b57fd437de
commit + 82954512f323c8a2d4f89d51be1e6b0f707b6c3a
blob - ca9591498c8d4a77dd452d5394cd10141c63e07f
blob + 99c464bbb1c0922bc325ee00100e39b70f857f7f
--- tog/tog.c
+++ tog/tog.c
@@ -755,6 +755,15 @@ view_input(struct tog_view **new, struct tog_view **de
 	*focus = NULL;
 
 	if (view->searching && !view->search_next_done) {
+		errcode = pthread_mutex_unlock(&tog_mutex);
+		if (errcode)
+			return got_error_set_errno(errcode,
+			    "pthread_mutex_unlock");
+		pthread_yield();
+		errcode = pthread_mutex_lock(&tog_mutex);
+		if (errcode)
+			return got_error_set_errno(errcode,
+			    "pthread_mutex_lock");
 		view->search_next(view);
 		return NULL;
 	}
@@ -1633,6 +1642,16 @@ trigger_log_thread(int load_all, int *commits_needed, 
 		if (errcode)
 			return got_error_set_errno(errcode,
 			    "pthread_cond_signal");
+		errcode = pthread_mutex_unlock(&tog_mutex);
+		if (errcode)
+			return got_error_set_errno(errcode,
+			    "pthread_mutex_unlock");
+		pthread_yield();
+		errcode = pthread_mutex_lock(&tog_mutex);
+		if (errcode)
+			return got_error_set_errno(errcode,
+			    "pthread_mutex_lock");
+
 		if (*commits_needed > 0 && (!load_all || --max_wait <= 0)) {
 			/*
 			 * Thread is not done yet; lose a key press