/****************************************************************************
- * Copyright (c) 1998-2005,2006 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2006,2007 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 <curses.priv.h>
-MODULE_ID("$Id: lib_newwin.c,v 1.38 2006/10/14 20:31:19 tom Exp $")
+MODULE_ID("$Id: lib_newwin.c,v 1.41 2007/10/20 20:56:07 tom Exp $")
static WINDOW *
remove_window_from_screen(WINDOW *win)
SCREEN *sp = *scan;
if (sp->_curscr == win) {
sp->_curscr = 0;
+#if !USE_REENTRANT
if (win == curscr)
curscr = 0;
+#endif
} else if (sp->_stdscr == win) {
sp->_stdscr = 0;
+#if !USE_REENTRANT
if (win == stdscr)
stdscr = 0;
+#endif
} else if (sp->_newscr == win) {
sp->_newscr = 0;
+#if !USE_REENTRANT
if (win == newscr)
newscr = 0;
+#endif
} else {
scan = &(*scan)->_next_screen;
continue;
WINDOW *win;
bool is_pad = (flags & _ISPAD);
- T(("_nc_makenew(%d,%d,%d,%d)", num_lines, num_columns, begy, begx));
+ T((T_CALLED("_nc_makenew(%d,%d,%d,%d)"), num_lines, num_columns, begy, begx));
if (SP == 0)
- return 0;
+ returnWin(0);
if (!dimension_limit(num_lines) || !dimension_limit(num_columns))
- return 0;
+ returnWin(0);
if ((wp = typeCalloc(WINDOWLIST, 1)) == 0)
- return 0;
+ returnWin(0);
+
+#ifdef USE_PTHREADS
+ {
+ pthread_mutexattr_t recattr;
+ memset(&recattr, 0, sizeof(recattr));
+ pthread_mutexattr_settype(&recattr, PTHREAD_MUTEX_RECURSIVE);
+ pthread_mutex_init(&(wp->mutex_use_window), &recattr);
+ }
+#endif
win = &(wp->win);
if ((win->_line = typeCalloc(struct ldat, ((unsigned) num_lines))) == 0) {
free(win);
- return 0;
+ returnWin(0);
}
win->_curx = 0;
T((T_CREATE("window %p"), win));
- return (win);
+ returnWin(win);
}