[QUERY] Help With Semaphore Error on Windows : Cygwin
Yeo Kai Wei
yeokaiwei@hotmail.com
Fri Feb 17 04:56:06 GMT 2023
Hi All,
Thanks for the help.
It works now.
So, the 2 things that were required
1. Adding the '/' in front of the semaphore name so that Cygwin can
recognise it
#define SemaphoreName "/mysemaphore"
2. Changing the if check from if(semptr == (void*) -1) to if(semptr ==
(sem_t*) 0)
Thank you very much, Takashi and Corinna.
Kind Regards,
YEO Kai Wei
On 16/2/2023 10:59 pm, Corinna Vinschen wrote:
> Hi Kai,
>
> Apart from what Takashi already wrote, there's another bug in this code:
>
> On Feb 16 12:04, Yeo Kai Wei via Cygwin wrote:
>> #define ByteSize 512
>> #define BackingFile "/shMemEx"
>> #define AccessPerms 0644
>> #define SemaphoreName "mysemaphore"
> ^^^^^^^^^^^^
>
> What Takashi wrote. The reason that you don't notice that sem_open
> actuially failed is...
>
>> //Create the semaphore
>> sem_t* semptr = sem_open( SemaphoreName,//name
>> O_CREAT, //create semaphore
>> AccessPerms, //protection permissions
>> 0); //Initial value
>>
>> //ERROR
>> if(semptr == (void*) -1)
> ^^^^^^^^^^
> This.
>
> Why do you test for -1? If you read the POSIX man page for sem_open,
> you'll see this:
>
> Upon successful completion, the sem_open() function shall return the
> address of the semaphore. Otherwise, it shall return a value of
> SEM_FAILED [...]
> ^^^^^^^^^^
>
> SEM_FAILED is not necessarily -1. On Cygwin it's defined as
>
> #define SEM_FAILED ((sem_t *) 0)
>
> in /usr/include/semaphore.h.
>
> So your code just seems to fail in sem_post, but actually that's
> because sem_open failed and your code checks for the wrong return
> value.
>
>
> HTH,
> Corinna
More information about the Cygwin
mailing list