* cygthread.cc (operator new): Be more defensive when messing with threads that
are marked "unavailable".
This commit is contained in:
parent
a61bf8c369
commit
b410f1680f
@ -1,3 +1,8 @@
|
|||||||
|
2003-04-04 Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
|
* cygthread.cc (operator new): Be more defensive when messing with
|
||||||
|
threads that are marked "unavailable".
|
||||||
|
|
||||||
2003-04-03 Christopher Faylor <cgf@redhat.com>
|
2003-04-03 Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
* fhandler_console.cc (CONVERT_LIMIT): Use a size for the 21st century.
|
* fhandler_console.cc (CONVERT_LIMIT): Use a size for the 21st century.
|
||||||
|
@ -136,7 +136,9 @@ new (size_t)
|
|||||||
|
|
||||||
/* Search the threads array for an empty slot to use */
|
/* Search the threads array for an empty slot to use */
|
||||||
for (info = threads; info < threads + NTHREADS; info++)
|
for (info = threads; info < threads + NTHREADS; info++)
|
||||||
if ((id = (DWORD) InterlockedExchange ((LPLONG) &info->avail, 0)))
|
if ((LONG) (id = (DWORD) InterlockedExchange ((LPLONG) &info->avail, -1)) < 0)
|
||||||
|
/* being considered */;
|
||||||
|
else if (id > 0)
|
||||||
{
|
{
|
||||||
#ifdef DEBUGGING
|
#ifdef DEBUGGING
|
||||||
if (info->__name)
|
if (info->__name)
|
||||||
@ -146,7 +148,9 @@ new (size_t)
|
|||||||
#endif
|
#endif
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
else if (!info->id)
|
else if (info->id)
|
||||||
|
InterlockedExchange ((LPLONG) &info->avail, 0);
|
||||||
|
else
|
||||||
{
|
{
|
||||||
info->h = CreateThread (&sec_none_nih, 0, cygthread::stub, info,
|
info->h = CreateThread (&sec_none_nih, 0, cygthread::stub, info,
|
||||||
CREATE_SUSPENDED, &info->id);
|
CREATE_SUSPENDED, &info->id);
|
||||||
@ -162,6 +166,7 @@ new (size_t)
|
|||||||
info = freerange (); /* exhausted thread pool */
|
info = freerange (); /* exhausted thread pool */
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
InterlockedExchange ((LPLONG) &info->avail, 0);
|
||||||
cygthread_protect->release ();
|
cygthread_protect->release ();
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user