* cygthread.cc (cygthread::freerange): Set inuse count. Avoid setting ev from
h as h would be NULL at this point. (cygthread::operator new): Issue debugging info when overflowing the thread pool. (cygthread::cygthread): Set ev from h here after h has been initialized.
This commit is contained in:
parent
2985521f84
commit
ef4d65ba95
|
@ -1,3 +1,11 @@
|
|||
2003-11-07 Christopher Faylor <cgf@redhat.com>
|
||||
|
||||
* cygthread.cc (cygthread::freerange): Set inuse count. Avoid setting
|
||||
ev from h as h would be NULL at this point.
|
||||
(cygthread::operator new): Issue debugging info when overflowing the
|
||||
thread pool.
|
||||
(cygthread::cygthread): Set ev from h here after h has been initialized.
|
||||
|
||||
2003-11-06 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* bsdlib.cc (_vwarnx): New function.
|
||||
|
|
|
@ -128,7 +128,7 @@ cygthread::freerange ()
|
|||
{
|
||||
cygthread *self = (cygthread *) calloc (1, sizeof (*self));
|
||||
self->is_freerange = true;
|
||||
self->ev = self->h;
|
||||
self->inuse = 1;
|
||||
return self;
|
||||
}
|
||||
|
||||
|
@ -153,6 +153,8 @@ new (size_t)
|
|||
char buf[1024];
|
||||
if (!GetEnvironmentVariable ("CYGWIN_FREERANGE_NOCHECK", buf, sizeof (buf)))
|
||||
api_fatal ("Overflowed cygwin thread pool");
|
||||
else
|
||||
thread_printf ("Overflowed cygwin thread pool");
|
||||
#endif
|
||||
|
||||
info = freerange (); /* exhausted thread pool */
|
||||
|
@ -180,6 +182,8 @@ cygthread::cygthread (LPTHREAD_START_ROUTINE start, LPVOID param,
|
|||
this, 0, &id);
|
||||
if (!h)
|
||||
api_fatal ("thread handle not set - %p<%p>, %E", h, id);
|
||||
if (is_freerange)
|
||||
ev = h;
|
||||
thread_printf ("created thread %p", h);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -618,27 +618,25 @@ fhandler_disk_file::opendir ()
|
|||
else if ((dir->__d_dirname = (char *) malloc (len + 3)) == NULL)
|
||||
{
|
||||
set_errno (ENOMEM);
|
||||
free (dir);
|
||||
goto free_dir;
|
||||
}
|
||||
else if ((dir->__d_dirent =
|
||||
(struct dirent *) malloc (sizeof (struct dirent))) == NULL)
|
||||
{
|
||||
set_errno (ENOMEM);
|
||||
free (dir);
|
||||
free (dir->__d_dirname);
|
||||
goto free_dirname;
|
||||
}
|
||||
else if (access_worker (pc, R_OK) != 0)
|
||||
{
|
||||
free (dir);
|
||||
free (dir->__d_dirname);
|
||||
}
|
||||
goto free_dirent;
|
||||
else
|
||||
{
|
||||
strcpy (dir->__d_dirname, get_win32_name ());
|
||||
dir->__d_dirent->d_version = __DIRENT_VERSION;
|
||||
cygheap_fdnew fd;
|
||||
if (fd >= 0)
|
||||
{
|
||||
|
||||
if (fd < 0)
|
||||
goto free_dirent;
|
||||
|
||||
fd = this;
|
||||
fd->set_nohandle (true);
|
||||
dir->__d_dirent->d_fd = fd;
|
||||
|
@ -655,13 +653,21 @@ fhandler_disk_file::opendir ()
|
|||
dir->__d_dirhash = get_namehash ();
|
||||
|
||||
res = dir;
|
||||
}
|
||||
|
||||
if (pc.isencoded ())
|
||||
set_encoded ();
|
||||
}
|
||||
|
||||
syscall_printf ("%p = opendir (%s)", res, get_name ());
|
||||
return res;
|
||||
|
||||
free_dirent:
|
||||
free (dir->__d_dirent);
|
||||
free_dirname:
|
||||
free (dir->__d_dirname);
|
||||
free_dir:
|
||||
free (dir);
|
||||
return res;
|
||||
}
|
||||
|
||||
struct dirent *
|
||||
|
|
Loading…
Reference in New Issue