diff options
author | Michael Haubenwallner <michael.haubenwallner@ssi-schaefer.com> | 2019-05-13 16:36:23 +0200 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2019-06-03 18:38:16 +0200 |
commit | a9c27900e3d98fa4e57405e7abc10c260f2167d2 (patch) | |
tree | 656769db7818d4e68d48cdb7d15da88acb56724e | |
parent | 6c9ad75a4bd40e9d72a109d17cc9fe6cc754af08 (diff) | |
download | cygnal-a9c27900e3d98fa4e57405e7abc10c260f2167d2.tar.gz cygnal-a9c27900e3d98fa4e57405e7abc10c260f2167d2.tar.bz2 cygnal-a9c27900e3d98fa4e57405e7abc10c260f2167d2.zip |
Cygwin: dll_list: no recursive use of nt_max_path_buf
Querying the ntlength and existence of the /var/run/cygfork directory in
the very first Cygwin process should not use nt_max_path_buf, as that
one is used by dll_list::alloc already.
-rw-r--r-- | winsup/cygwin/forkable.cc | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/winsup/cygwin/forkable.cc b/winsup/cygwin/forkable.cc index 4fbc2abb3..350a95c3e 100644 --- a/winsup/cygwin/forkable.cc +++ b/winsup/cygwin/forkable.cc @@ -472,17 +472,21 @@ dll_list::forkable_ntnamesize (dll_type type, PCWCHAR fullntname, PCWCHAR modnam if (cygwin_shared->forkable_hardlink_support == 0) /* Unknown */ { /* check existence of forkables dir */ - PWCHAR pbuf = nt_max_path_buf (); + /* nt_max_path_buf () is already used in dll_list::alloc. + But as this is run in the very first cygwin process only, + using some heap is not a performance issue here. */ + PWCHAR pbuf = (PWCHAR) cmalloc_abort (HEAP_BUF, + NT_MAX_PATH * sizeof (WCHAR)); + PWCHAR pnext = pbuf; for (namepart const *part = forkable_nameparts; part->text; ++part) { if (part->textfunc) - pbuf += part->textfunc (pbuf, -1); + pnext += part->textfunc (pnext, -1); else - pbuf += __small_swprintf (pbuf, L"%W", part->text); + pnext += __small_swprintf (pnext, L"%W", part->text); if (part->mutex_from_dir) break; /* up to first mutex-naming dir */ } - pbuf = nt_max_path_buf (); UNICODE_STRING fn; RtlInitUnicodeString (&fn, pbuf); @@ -504,6 +508,7 @@ dll_list::forkable_ntnamesize (dll_type type, PCWCHAR fullntname, PCWCHAR modnam cygwin_shared->forkable_hardlink_support = -1; /* No */ debug_printf ("disabled, missing or not on NTFS %W", fn.Buffer); } + cfree (pbuf); } if (!forkables_supported ()) |