From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2155) id 5DBAB3858410; Tue, 17 Jan 2023 19:15:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5DBAB3858410 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1673982906; bh=Q9v38BKUxkoaxlS1l7FQKiZClY7Wh9u3wo+533MegCE=; h=From:To:Subject:Date:From; b=hdh8S30AMisrxS2LvnNYeKvol8Z3Ju44fzFVAJodI3bk6icXpcCk6i5phIoC+hAS7 FEvr4Y84MWgaH9PSnzKLFDp7phyKxzgzOXWjrfO49u9TYwgVHsv+JIuAIe/pXEmZcH fUkrC7UcvK6tDzRbSQSZqqexzlDFRXBIq0o9H5r8= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Corinna Vinschen To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin/main] Cygwin: open_shared: don't reuse shared_locations parameter as output X-Act-Checkin: newlib-cygwin X-Git-Author: Corinna Vinschen X-Git-Refname: refs/heads/main X-Git-Oldrev: 77680cac9404ae9e3d5ca424442129ba1e33df46 X-Git-Newrev: 93508e5bb841138911ed3dee3c92cc18be43d9ca Message-Id: <20230117191506.5DBAB3858410@sourceware.org> Date: Tue, 17 Jan 2023 19:15:06 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dnewlib-cygwin.git;h=3D93508e5bb84= 1138911ed3dee3c92cc18be43d9ca commit 93508e5bb841138911ed3dee3c92cc18be43d9ca Author: Corinna Vinschen AuthorDate: Mon Jan 16 22:25:42 2023 +0100 Commit: Corinna Vinschen CommitDate: Tue Jan 17 16:32:14 2023 +0100 Cygwin: open_shared: don't reuse shared_locations parameter as output =20 For ages, open_shared uses the shared_locations parameter as output to indicate if the mapping for a shared region has been created or just opened. Split this into two parameters. Use the shared_locations parameter as input only, return the creation state of the mapping in a bool reference parameter. =20 Signed-off-by: Corinna Vinschen Diff: --- winsup/cygwin/fhandler/console.cc | 7 +++--- winsup/cygwin/local_includes/shared_info.h | 8 +++--- winsup/cygwin/mm/shared.cc | 39 ++++++++++++++++----------= ---- winsup/cygwin/pinfo.cc | 6 ++--- 4 files changed, 31 insertions(+), 29 deletions(-) diff --git a/winsup/cygwin/fhandler/console.cc b/winsup/cygwin/fhandler/con= sole.cc index ee392fda25dc..68ab43d81ea1 100644 --- a/winsup/cygwin/fhandler/console.cc +++ b/winsup/cygwin/fhandler/console.cc @@ -211,15 +211,14 @@ beep () } =20 fhandler_console::console_state * -fhandler_console::open_shared_console (HWND hw, HANDLE& h, bool& create) +fhandler_console::open_shared_console (HWND hw, HANDLE& h, bool& created) { wchar_t namebuf[(sizeof "XXXXXXXXXXXXXXXXXX-consNNNNNNNNNN")]; __small_swprintf (namebuf, L"%S-cons%p", &cygheap->installation_key, hw); =20 - shared_locations m =3D create ? SH_SHARED_CONSOLE : SH_JUSTOPEN; + shared_locations m =3D created ? SH_SHARED_CONSOLE : SH_JUSTOPEN; console_state *res =3D (console_state *) - open_shared (namebuf, 0, h, sizeof (console_state), &m); - create =3D m !=3D SH_JUSTOPEN; + open_shared (namebuf, 0, h, sizeof (console_state), m, created); return res; } =20 diff --git a/winsup/cygwin/local_includes/shared_info.h b/winsup/cygwin/loc= al_includes/shared_info.h index 6c53ec0b8b0f..cbe55a27887b 100644 --- a/winsup/cygwin/local_includes/shared_info.h +++ b/winsup/cygwin/local_includes/shared_info.h @@ -89,9 +89,9 @@ HANDLE get_session_parent_dir (); char *shared_name (char *, const char *, int); WCHAR *shared_name (WCHAR *, const WCHAR *, int); void *open_shared (const WCHAR *, int, HANDLE&, DWORD, - shared_locations, PSECURITY_ATTRIBUTES =3D &sec_all, - DWORD =3D FILE_MAP_READ | FILE_MAP_WRITE); + shared_locations, PSECURITY_ATTRIBUTES =3D &sec_all, + DWORD =3D FILE_MAP_READ | FILE_MAP_WRITE); void *open_shared (const WCHAR *, int, HANDLE&, DWORD, - shared_locations *, PSECURITY_ATTRIBUTES =3D &sec_all, - DWORD =3D FILE_MAP_READ | FILE_MAP_WRITE); + shared_locations, bool &, PSECURITY_ATTRIBUTES =3D &sec_all, + DWORD =3D FILE_MAP_READ | FILE_MAP_WRITE); extern void user_shared_create (bool reinit); diff --git a/winsup/cygwin/mm/shared.cc b/winsup/cygwin/mm/shared.cc index 893b20d289b4..351d314af01b 100644 --- a/winsup/cygwin/mm/shared.cc +++ b/winsup/cygwin/mm/shared.cc @@ -127,54 +127,57 @@ void * open_shared (const WCHAR *name, int n, HANDLE& shared_h, DWORD size, shared_locations m, PSECURITY_ATTRIBUTES psa, DWORD access) { - return open_shared (name, n, shared_h, size, &m, psa, access); + bool created_dummy; + return open_shared (name, n, shared_h, size, m, created_dummy, psa, acce= ss); } =20 void * open_shared (const WCHAR *name, int n, HANDLE& shared_h, DWORD size, - shared_locations *m, PSECURITY_ATTRIBUTES psa, DWORD access) + shared_locations m, bool &created, PSECURITY_ATTRIBUTES psa, + DWORD access) { + WCHAR map_buf[MAX_PATH]; + WCHAR *mapname =3D NULL; void *shared; - void *addr; - if (*m =3D=3D SH_JUSTCREATE || *m =3D=3D SH_JUSTOPEN) + + if (m =3D=3D SH_JUSTCREATE || m =3D=3D SH_JUSTOPEN) addr =3D NULL; else - addr =3D (void *) region_address[*m]; + addr =3D (void *) region_address[m]; =20 - WCHAR map_buf[MAX_PATH]; - WCHAR *mapname =3D NULL; - - if (shared_h) - *m =3D SH_JUSTOPEN; - else + created =3D false; + if (!shared_h) { if (name) mapname =3D shared_name (map_buf, name, n); - if (*m =3D=3D SH_JUSTOPEN) - shared_h =3D OpenFileMappingW (access, FALSE, mapname); + if (m =3D=3D SH_JUSTOPEN) + shared_h =3D OpenFileMappingW (FILE_MAP_READ | FILE_MAP_WRITE, FALSE, + mapname); else { + created =3D true; shared_h =3D CreateFileMappingW (INVALID_HANDLE_VALUE, psa, PAGE_READWRITE, 0, size, mapname); if (GetLastError () =3D=3D ERROR_ALREADY_EXISTS) - *m =3D SH_JUSTOPEN; + created =3D false; } if (shared_h) /* ok! */; - else if (*m !=3D SH_JUSTOPEN) + else if (m !=3D SH_JUSTOPEN) api_fatal ("CreateFileMapping %W, %E. Terminating.", mapname); else return NULL; } =20 - shared =3D (shared_info *) MapViewOfFileEx (shared_h, access, 0, 0, 0, a= ddr); + shared =3D MapViewOfFileEx (shared_h, FILE_MAP_READ | FILE_MAP_WRITE, + 0, 0, 0, addr); =20 if (!shared) api_fatal ("MapViewOfFileEx '%W'(%p), %E. Terminating.", mapname, sha= red_h); =20 - debug_printf ("name %W, n %d, shared %p (wanted %p), h %p, *m %d", - mapname, n, shared, addr, shared_h, *m); + debug_printf ("name %W, n %d, shared %p (wanted %p), h %p, m %d", + mapname, n, shared, addr, shared_h, m); =20 return shared; } diff --git a/winsup/cygwin/pinfo.cc b/winsup/cygwin/pinfo.cc index fc618b9b8dd1..c05cf2662cd7 100644 --- a/winsup/cygwin/pinfo.cc +++ b/winsup/cygwin/pinfo.cc @@ -387,8 +387,10 @@ pinfo::init (pid_t n, DWORD flag, HANDLE h0) =20 for (int i =3D 0; i < 20; i++) { + bool created; + procinfo =3D (_pinfo *) open_shared (L"cygpid", n, h0, sizeof (_pinf= o), - &shloc, sec_attribs, access); + shloc, created, sec_attribs, access); if (!h0) { if (createit) @@ -409,8 +411,6 @@ pinfo::init (pid_t n, DWORD flag, HANDLE h0) continue; } =20 - bool created =3D shloc !=3D SH_JUSTOPEN; - /* Just fetching info for ps or /proc, don't do anything rash. */ if (!created && !(flag & PID_NEW) && !procinfo->ppid && (flag & PID_PROCINFO))