Opened 11 years ago
Closed 11 years ago
#5622 closed Bugs (fixed)
interprocess::named_semaphore::remove return value broken on POSIX systems
Reported by: | Owned by: | Ion Gaztañaga | |
---|---|---|---|
Milestone: | To Be Determined | Component: | interprocess |
Version: | Boost Development Trunk | Severity: | Problem |
Keywords: | Cc: |
Description
static bool named_semaphore::remove(const char *name) is documented as "Returns false on error", which is broken on POSIX platforms if BOOST_INTERPROCESS_NAMED_SEMAPHORE_USES_POSIX_SEMAPHORES is enabled.
named_semaphore::remove() (interprocess/sync/named_semaphore.hpp:166) calls static bool detail::named_semaphore_wrapper::remove(const char *name), which (interprocess/sync/posix/semaphore_wrapper.hpp:229) calls inline bool semaphore_unlink(const char *name) (:106). This function uses the POSIX API call sem_unlink() (:115) to do the unlinking:
return 0 != sem_unlink(sem_str.c_str());
This makes semaphore_unlink() return false if sem_unlink() returns 0. POSIX' sem_unlink() is documented to return 0 on success, though: "Upon successful completion, the sem_unlink() function shall return a value of 0." (POSIX API docs) interprocess/sync/posix/semaphore_wrapper.hpp:115 should be changed to the following:
return 0 == sem_unlink(sem_str.c_str());
Attachments (2)
Change History (3)
by , 11 years ago
Attachment: | syncbug.cc added |
---|
by , 11 years ago
Attachment: | remove-semaphore.diff added |
---|
Patch for expected behaviour (against current development trunk SVN head)
comment:1 by , 11 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Thanks for the report. Fixed in trunk.
Code snippet to reproduce the bug