mdbx: more yields as workaround for pthreads bug.

Backport 719ecd55cf1d0ea7d6771248b3936f056bc49a47 from https://github.com/ReOpen/ReOpenLDAP

Change-Id: I6bead57782a29fca5352055db6afee02ad1ee38b
This commit is contained in:
Leo Yuriev 2017-03-12 14:09:35 +03:00
parent 36bc576036
commit 4507c1c6bb

7
mdb.c
View File

@ -4672,7 +4672,7 @@ void mdbx_pthread_crutch_dtor(void)
* деструкторы уже могли начать выполняться.
* Уступая квант времени сразу после удаления ключа
* мы даем им шанс завершиться. */
pthread_yield();
sched_yield(); sched_yield(); sched_yield();
mdbx_rthc_lock();
pid_t pid = getpid();
@ -4691,11 +4691,12 @@ void mdbx_pthread_crutch_dtor(void)
* Поэтому на каждой итерации уступаем квант времени,
* в надежде что деструкторы успеют отработать. */
mdbx_rthc_unlock();
pthread_yield();
sched_yield(); sched_yield(); sched_yield();
mdbx_rthc_lock();
}
mdbx_rthc_unlock();
pthread_yield();
sched_yield(); sched_yield(); sched_yield();
}
#endif /* MDBX_USE_THREAD_ATEXIT */