Ensure that the argument of shmdt(2) is declared "void *".
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 15 Feb 2022 22:17:25 +0000 (17:17 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 15 Feb 2022 22:17:28 +0000 (17:17 -0500)
Our gcc-on-Solaris buildfarm members emit "incompatible pointer type"
warnings in places where it's not.  This is a bit odd, since AFAICT
Solaris follows the POSIX spec in declaring shmdt's argument as
"const void *", and you'd think any pointer argument would satisfy that.
But whatever.  Part of a general push to remove off-the-beaten-track
warnings where we can easily do so.

src/backend/port/sysv_shmem.c

index 821a2598f1b85e23af324533b34aeb544e9cdcaa..ea287c733df35738efedd3dcdb89c46855a52c05 100644 (file)
@@ -289,7 +289,7 @@ static void
 IpcMemoryDetach(int status, Datum shmaddr)
 {
    /* Detach System V shared memory block. */
-   if (shmdt(DatumGetPointer(shmaddr)) < 0)
+   if (shmdt((void *) DatumGetPointer(shmaddr)) < 0)
        elog(LOG, "shmdt(%p) failed: %m", DatumGetPointer(shmaddr));
 }
 
@@ -323,7 +323,7 @@ PGSharedMemoryIsInUse(unsigned long id1, unsigned long id2)
    IpcMemoryState state;
 
    state = PGSharedMemoryAttach((IpcMemoryId) id2, NULL, &memAddress);
-   if (memAddress && shmdt(memAddress) < 0)
+   if (memAddress && shmdt((void *) memAddress) < 0)
        elog(LOG, "shmdt(%p) failed: %m", memAddress);
    switch (state)
    {
@@ -807,7 +807,7 @@ PGSharedMemoryCreate(Size size,
                break;
        }
 
-       if (oldhdr && shmdt(oldhdr) < 0)
+       if (oldhdr && shmdt((void *) oldhdr) < 0)
            elog(LOG, "shmdt(%p) failed: %m", oldhdr);
    }