* cygheap.cc (init_cygheap::close_ctty): Avoid closing console-cttys since they
don't use archetypes and this will just result in double frees. * dll_init.cc (dll_list::protect): Define. (dll_list::alloc): Guard list access. (dll_list::detach): Ditto. * dll_init.h (dll_list::protect): Declare new muto. (dll_list::guard): Define/declare function to guard list access. * fhandler_termios.cc (fhandler_termios::sigflush): Avoid SEGV in pathological condition of get_ttyp() == NULL.
This commit is contained in:
@@ -72,6 +72,7 @@ class dll_list
|
||||
dll *end;
|
||||
dll *hold;
|
||||
dll_type hold_type;
|
||||
static muto protect;
|
||||
public:
|
||||
dll start;
|
||||
int tot;
|
||||
@@ -90,13 +91,22 @@ public:
|
||||
break;
|
||||
return hold;
|
||||
}
|
||||
|
||||
dll *istart (dll_type t)
|
||||
{
|
||||
hold_type = t;
|
||||
hold = &start;
|
||||
return inext ();
|
||||
}
|
||||
void guard(bool lockit)
|
||||
{
|
||||
if (lockit)
|
||||
protect.acquire ();
|
||||
else
|
||||
protect.release ();
|
||||
}
|
||||
friend void dll_global_dtors ();
|
||||
dll_list () { protect.init ("dll_list"); }
|
||||
};
|
||||
|
||||
extern dll_list dlls;
|
||||
|
Reference in New Issue
Block a user