"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Martin Pieuchot <mpi@openbsd.org>
Subject:
Remove unnecessary context switches
To:
gameoftrees@openbsd.org
Date:
Sun, 19 Jan 2020 13:46:16 +0100

Download raw body.

Thread
tog(1) calls pthread_yield(3) without good reason.  This function
commonly indicates a better synchronisation primitive is required.
However in the two places below this isn't the case.  Removing those
calls makes the tool faster in my small tests.

I'd appreciate more tests to be sure there's no regression.

Ok?

diff --git tog/tog.c tog/tog.c
index c1f1819..db59543 100644
--- tog/tog.c
+++ tog/tog.c
@@ -739,15 +739,6 @@ view_input(struct tog_view **new, struct tog_view **dead,
 	*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;
 	}
@@ -1652,16 +1643,6 @@ trigger_log_thread(int load_all, int *commits_needed, int *log_complete,
 		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