In posix vos_semaCreate following line allocates memory:
*ppSema = (VOS_SEMA_T) vos_memAlloc(sizeof (VOS_SEMA_T));
which is passed to sem_init few lines later. The allocation allocates only for a size of pointer, but sem_init expects to get a pointer to an already allocated sem_t. I noticed this while investigating a crash with valgrind. I believe same problem may also be in the Windows implementation. I've attached a patch that should fix the problem for posix.
I'm using version 1.3.3.0 but the same code is also present in the trunk and the patch is based on the trunk.
This is very strange. Actually there is no definition of struct VOS_SEM in the POSIX part at all. It all works as long as the Semaphore has the size ≤ sizeof(ptr).