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

-- 
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

Reply via email to