summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/pinfo.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/pinfo.cc')
-rw-r--r--winsup/cygwin/pinfo.cc24
1 files changed, 18 insertions, 6 deletions
diff --git a/winsup/cygwin/pinfo.cc b/winsup/cygwin/pinfo.cc
index 3cfa82a70..d5b3bc09d 100644
--- a/winsup/cygwin/pinfo.cc
+++ b/winsup/cygwin/pinfo.cc
@@ -30,9 +30,21 @@ details. */
#include "tls_pbuf.h"
#include "child_info.h"
-static char NO_COPY pinfo_dummy[sizeof (_pinfo)] = {0};
+class pinfo_basic: public _pinfo
+{
+public:
+ pinfo_basic();
+};
-pinfo NO_COPY myself ((_pinfo *)&pinfo_dummy); // Avoid myself != NULL checks
+pinfo_basic::pinfo_basic()
+{
+ pid = dwProcessId = GetCurrentProcessId ();
+ GetModuleFileName (NULL, progname, sizeof (progname));
+}
+
+pinfo_basic myself_initial NO_COPY;
+
+pinfo NO_COPY myself (static_cast<_pinfo *> (&myself_initial)); // Avoid myself != NULL checks
bool is_toplevel_proc;
@@ -43,12 +55,12 @@ void __stdcall
set_myself (HANDLE h)
{
if (!h)
- cygheap->pid = cygwin_pid (GetCurrentProcessId ());
+ cygheap->pid = cygwin_pid (myself_initial.pid);
+
myself.init (cygheap->pid, PID_IN_USE, h ?: INVALID_HANDLE_VALUE);
myself->process_state |= PID_IN_USE;
- myself->dwProcessId = GetCurrentProcessId ();
-
- GetModuleFileName (NULL, myself->progname, sizeof (myself->progname));
+ myself->dwProcessId = myself_initial.pid;
+ strcpy (myself->progname, myself_initial.progname);
strace.hello ();
debug_printf ("myself->dwProcessId %u", myself->dwProcessId);
if (h)