X-Git-Url: https://ncurses.scripts.mit.edu/?a=blobdiff_plain;f=ncurses%2Ftinfo%2Fentries.c;h=f47fd3fe9eff7d6ef0a4e7b84256374310bf8b54;hb=d1a029866f6d84087781eaa81de19949d8533426;hp=c928f7ec2911aab5532f2aa5791d2b3c6e7d3725;hpb=461e72d1826483cb2c2cb243412f2dc5b00b2b1a;p=ncurses.git diff --git a/ncurses/tinfo/entries.c b/ncurses/tinfo/entries.c index c928f7ec..f47fd3fe 100644 --- a/ncurses/tinfo/entries.c +++ b/ncurses/tinfo/entries.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright 2019-2020,2021 Thomas E. Dickey * + * Copyright 2019-2022,2023 Thomas E. Dickey * * Copyright 2006-2012,2017 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * @@ -38,7 +38,7 @@ #include -MODULE_ID("$Id: entries.c,v 1.32 2021/11/20 23:40:57 tom Exp $") +MODULE_ID("$Id: entries.c,v 1.35 2023/05/27 20:13:10 tom Exp $") /**************************************************************************** * @@ -65,7 +65,7 @@ NCURSES_EXPORT_VAR(ENTRY *) _nc_head = 0; NCURSES_EXPORT_VAR(ENTRY *) _nc_tail = 0; static ENTRY * -_nc_delink_entry(ENTRY * headp, TERMTYPE2 *tterm) +_nc_delink_entry(ENTRY * headp, const TERMTYPE2 *const tterm) /* delink the allocated storage for the given list entry */ { ENTRY *ep, *last; @@ -119,12 +119,28 @@ _nc_leaks_tinfo(void) char *s; #endif - T((T_CALLED("_nc_free_tinfo()"))); + T((T_CALLED("_nc_leaks_tinfo()"))); #if NO_LEAKS _nc_globals.leak_checking = TRUE; _nc_free_tparm(cur_term); _nc_tgetent_leaks(); +#ifdef USE_PTHREADS + /* + * Discard any prescreen data which is not used for the current screen. + */ + _nc_lock_global(screen); + { + PRESCREEN_LIST *p; + pthread_t id = GetThreadID(); + for (p = _nc_prescreen.allocated; p != 0; p = p->next) { + if (p->id == id && p->sp != CURRENT_SCREEN) { + FreeAndNull(p->sp); + } + } + } + _nc_unlock_global(screen); +#endif if (TerminalOf(CURRENT_SCREEN) != 0) { del_curterm(TerminalOf(CURRENT_SCREEN)); } @@ -161,6 +177,7 @@ _nc_leaks_tinfo(void) NCURSES_EXPORT(void) _nc_free_tinfo(int code) { + T((T_CALLED("_nc_free_tinfo(%d)"), code)); _nc_leaks_tinfo(); exit(code); } @@ -169,6 +186,7 @@ _nc_free_tinfo(int code) NCURSES_EXPORT(void) exit_terminfo(int code) { + T((T_CALLED("exit_terminfo(%d)"), code)); #if NO_LEAKS _nc_leaks_tinfo(); #endif