/****************************************************************************
- * Copyright (c) 2006-2017,2019 Free Software Foundation, Inc. *
+ * 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 *
* copy of this software and associated documentation files (the *
#include <tic.h>
-MODULE_ID("$Id: entries.c,v 1.29 2019/12/15 00:18:03 tom Exp $")
+MODULE_ID("$Id: entries.c,v 1.35 2023/05/27 20:13:10 tom Exp $")
/****************************************************************************
*
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;
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();
+ _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));
}
NCURSES_EXPORT(void)
_nc_free_tinfo(int code)
{
+ T((T_CALLED("_nc_free_tinfo(%d)"), code));
_nc_leaks_tinfo();
exit(code);
}
NCURSES_EXPORT(void)
exit_terminfo(int code)
{
+ T((T_CALLED("exit_terminfo(%d)"), code));
#if NO_LEAKS
_nc_leaks_tinfo();
#endif