Re: [PATCH] Use DatumGetUInt32() for dsm_attach() in test_shm_mq_main()
Nathan Bossart <nathandbossart@gmail.com>
From: Nathan Bossart <nathandbossart@gmail.com>
To: Jianghua Yang <yjhjstz@gmail.com>
Cc: pgsql-hackers@lists.postgresql.org
Date: 2025-06-26T21:34:00Z
Lists: pgsql-hackers
On Thu, Jun 26, 2025 at 01:46:10PM -0700, Jianghua Yang wrote: > Just to follow up - in our production system (pg_cron extension), > we´ve encountered real issues caused by passing a `Datum` to > `dsm_attach()` using `DatumGetInt32()` instead of `DatumGetUInt32()`. > > Here's a sample of the errors observed in our logs: > > > ERROR: unable to map dynamic shared memory segment > WARNING: one or more background workers failed to start > > > These errors trace back to failures in `dsm_attach()`, where the > segment handle value was incorrectly interpreted due to sign extension > from `int32`. I think there might be something else going on. I added a debug log in test_shm_mq, and it looks like it regularly uses handles with the high bit set. I also wrote a test program and consulted the C standard, which seem to confirm that passing a signed integer to a function with an unsigned parameter leaves the high bit set. -- nathan
Commits
-
Use correct DatumGet*() function in test_shm_mq_main().
- e2f06282124b 14.19 landed
- bf377c21a64a 13.22 landed
- bbccf7ecb363 18.0 landed
- 4dc48ad28d96 15.14 landed
- 07402e370e5b 17.6 landed
- 01f26f5c2e45 16.10 landed