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