summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2007-08-16 14:30:53 +0000
committerCorinna Vinschen <corinna@vinschen.de>2007-08-16 14:30:53 +0000
commitdec9daad4a6b6f5f705f8e637d21e9e035d08218 (patch)
treee9d1604b26fa8286c35314d4430a8094d5616a62 /winsup/cygwin
parentbd61a7f7b922dc8b14fc5cc395d0b5503673b219 (diff)
downloadcygnal-dec9daad4a6b6f5f705f8e637d21e9e035d08218.tar.gz
cygnal-dec9daad4a6b6f5f705f8e637d21e9e035d08218.tar.bz2
cygnal-dec9daad4a6b6f5f705f8e637d21e9e035d08218.zip
* ntdll.h (RtlAcquirePebLock): Declare.
(RtlReleasePebLock): Declare. * path.cc (cwdstuff::set): Change PEB only while it's locked.
Diffstat (limited to 'winsup/cygwin')
-rw-r--r--winsup/cygwin/ChangeLog6
-rw-r--r--winsup/cygwin/ntdll.h2
-rw-r--r--winsup/cygwin/path.cc9
3 files changed, 12 insertions, 5 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index bc701fd5a..9f36db5a9 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,5 +1,11 @@
2007-08-16 Corinna Vinschen <corinna@vinschen.de>
+ * ntdll.h (RtlAcquirePebLock): Declare.
+ (RtlReleasePebLock): Declare.
+ * path.cc (cwdstuff::set): Change PEB only while it's locked.
+
+2007-08-16 Corinna Vinschen <corinna@vinschen.de>
+
* fhandler.h (fhandler_base::get_namehash): Use NT native path.
* fhandler_disk_file.cc (readdir_get_ino): Ditto in call to
hash_path_name.
diff --git a/winsup/cygwin/ntdll.h b/winsup/cygwin/ntdll.h
index 7b8c556b9..ff9f95506 100644
--- a/winsup/cygwin/ntdll.h
+++ b/winsup/cygwin/ntdll.h
@@ -827,6 +827,7 @@ extern "C"
NTSTATUS NTAPI RtlAppendUnicodeToString (PUNICODE_STRING, PCWSTR);
NTSTATUS NTAPI RtlAppendUnicodeStringToString (PUNICODE_STRING,
PUNICODE_STRING);
+ VOID NTAPI RtlAcquirePebLock ();
NTSTATUS NTAPI RtlAnsiStringToUnicodeString (PUNICODE_STRING, PANSI_STRING,
BOOLEAN);
LONG NTAPI RtlCompareUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
@@ -848,6 +849,7 @@ extern "C"
BOOLEAN);
BOOLEAN NTAPI RtlPrefixUnicodeString (PUNICODE_STRING, PUNICODE_STRING,
BOOLEAN);
+ VOID NTAPI RtlReleasePebLock ();
VOID NTAPI RtlSecondsSince1970ToTime (ULONG, PLARGE_INTEGER);
NTSTATUS NTAPI RtlUnicodeStringToAnsiString (PANSI_STRING, PUNICODE_STRING,
BOOLEAN);
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index 5a0bc903b..a8b64da98 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -4329,6 +4329,7 @@ cwdstuff::set (const char *win32_cwd, const char *posix_cwd, bool doit)
strcpy (as.Buffer + len, "\\");
++as.Length;
}
+ RtlAcquirePebLock ();
if (current_codepage == ansi_cp)
RtlAnsiStringToUnicodeString (
&get_user_proc_parms ()->CurrentDirectoryName,
@@ -4339,11 +4340,9 @@ cwdstuff::set (const char *win32_cwd, const char *posix_cwd, bool doit)
&as, FALSE);
PHANDLE phdl = &get_user_proc_parms ()->CurrentDirectoryHandle;
if (*phdl)
- {
- HANDLE old_h = *phdl;
- *phdl = h;
- CloseHandle (old_h);
- }
+ CloseHandle (*phdl);
+ *phdl = h;
+ RtlReleasePebLock ();
}
}
/* If there is no win32 path or it has the form c:xxx, get the value */