Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2010-08-18 18:22:07 +0400
committerCorinna Vinschen <corinna@vinschen.de>2010-08-18 18:22:07 +0400
commit75a3b85877941516c8430603f876019b916a6240 (patch)
treed03fe18d97da98508b346ddf13ffa08c5cc97405 /winsup/cygwin
parentd15ed91c04e3499de636b33ab59443049b94a815 (diff)
* exceptions.cc (open_stackdumpfile): Don't try to open file if we
have no filesystem based CWD. Add comment. * path.cc (cwdstuff::set): Set CWD handle to NULL if CWD is a virtual path. Simplify matching comment.
Diffstat (limited to 'winsup/cygwin')
-rw-r--r--winsup/cygwin/ChangeLog7
-rw-r--r--winsup/cygwin/exceptions.cc5
-rw-r--r--winsup/cygwin/path.cc17
3 files changed, 16 insertions, 13 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index a49f03e65..c4284bdac 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,5 +1,12 @@
2010-08-18 Corinna Vinschen <corinna@vinschen.de>
+ * exceptions.cc (open_stackdumpfile): Don't try to open file if we
+ have no filesystem based CWD. Add comment.
+ * path.cc (cwdstuff::set): Set CWD handle to NULL if CWD is a virtual
+ path. Simplify matching comment.
+
+2010-08-18 Corinna Vinschen <corinna@vinschen.de>
+
* fhandler_disk_file.cc (fhandler_base::fstat_helper): Set st_rdev
to correct device number for fs_special devices.
diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc
index a2afa5e0f..e904ff188 100644
--- a/winsup/cygwin/exceptions.cc
+++ b/winsup/cygwin/exceptions.cc
@@ -128,7 +128,10 @@ error_start_init (const char *buf)
static void
open_stackdumpfile ()
{
- if (myself->progname[0])
+ /* If we have no executable name, or if the CWD handle is NULL,
+ which means, the CWD is a virtual path, don't even try to open
+ a stackdump file. */
+ if (myself->progname[0] && cygheap->cwd.get_handle ())
{
const WCHAR *p;
/* write to progname.stackdump if possible */
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index ee7d186eb..00a9c1d65 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -3321,9 +3321,9 @@ cwdstuff::set (path_conv *nat_cwd, const char *posix_cwd)
/* Open a directory handle with FILE_OPEN_FOR_BACKUP_INTENT and with all
sharing flags set. The handle is right now used in exceptions.cc only,
but that might change in future. */
+ HANDLE h = NULL;
if (!virtual_path)
{
- HANDLE h;
NTSTATUS status;
IO_STATUS_BLOCK io;
OBJECT_ATTRIBUTES attr;
@@ -3363,18 +3363,11 @@ cwdstuff::set (path_conv *nat_cwd, const char *posix_cwd)
__seterrno_from_nt_status (status);
return -1;
}
- /* Note that we don't set the dir handle to NULL for virtual paths.
- The handle is used to generate a stackdump file. Since we can't
- create a stackdump in a virtual path, we have at least *some*
- directory handle to generate the stackdump in.
-
- However, note that we have to make sure that we don't use the handle
- wrongly as soon as we start to use it in other cases as well. */
- HANDLE old_dir = dir;
- dir = h;
- if (old_dir)
- NtClose (old_dir);
}
+ /* Set new handle. It's only used when creating stackdumps so far. */
+ if (dir)
+ NtClose (dir);
+ dir = h;
if (!nat_cwd)
{