ncurses/ncurses-6.1-weakpthreads.dif

48 lines
1.5 KiB
Plaintext
Raw Normal View History

With ncurses-6.0-20170701.patch
+ improve compatibility between different configurations of new_prescr,
fixing a case with threaded code and term-driver where c++/demo did
not work (cf: 20160213).
the pthread_self(3) function call had been called without checking if the
library libpthread has been linked. This break e.g. grub (boo#1058509) if
statically linked.
---
ncurses/tinfo/lib_setup.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
--- ncurses/tinfo/lib_setup.c
+++ ncurses/tinfo/lib_setup.c 2018-03-01 10:58:23.280319133 +0000
@@ -830,8 +830,9 @@ _nc_find_prescr(void)
{
SCREEN *result = 0;
PRESCREEN_LIST *p;
+ pthread_t id = ((pthread_self)) ? pthread_self() : (pthread_t)getpid();
for (p = _nc_prescreen.allocated; p != 0; p = p->next) {
- if (p->id == pthread_self()) {
+ if (p->id == id) {
result = p->sp;
break;
}
@@ -848,8 +849,9 @@ NCURSES_EXPORT(void)
_nc_forget_prescr(void)
{
PRESCREEN_LIST *p, *q;
+ pthread_t id = ((pthread_self)) ? pthread_self() : (pthread_t)getpid();
for (p = _nc_prescreen.allocated, q = 0; p != 0; q = p, p = p->next) {
- if (p->id == pthread_self()) {
+ if (p->id == id) {
if (q) {
q->next = p->next;
} else {
@@ -885,7 +887,7 @@ new_prescr(void)
#ifdef USE_PTHREADS
PRESCREEN_LIST *p = typeCalloc(PRESCREEN_LIST, 1);
if (p != 0) {
- p->id = pthread_self();
+ p->id = ((pthread_self)) ? pthread_self() : (pthread_t)getpid();
p->sp = sp;
p->next = _nc_prescreen.allocated;
_nc_prescreen.allocated = p;