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