Modify

Ticket #5622 (closed Bugs: fixed)

Opened 3 years ago

Last modified 2 years ago

interprocess::named_semaphore::remove return value broken on POSIX systems

Reported by: Horst Schirmeier <horst@…> Owned by: igaztanaga
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

syncbug.cc Download (423 bytes) - added by Horst Schirmeier <horst@…> 3 years ago.
Code snippet to reproduce the bug
remove-semaphore.diff Download (504 bytes) - added by Horst Schirmeier <horst@…> 3 years ago.
Patch for expected behaviour (against current development trunk SVN head)

Change History

Changed 3 years ago by Horst Schirmeier <horst@…>

Code snippet to reproduce the bug

Changed 3 years ago by Horst Schirmeier <horst@…>

Patch for expected behaviour (against current development trunk SVN head)

comment:1 Changed 2 years ago by igaztanaga

  • Status changed from new to closed
  • Resolution set to fixed

Thanks for the report. Fixed in trunk.

View

Add a comment

Modify Ticket

Change Properties
<Author field>
Action
as closed
The resolution will be deleted. Next status will be 'reopened'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.