> > As I reviewed the win32/sema.c, there is some code that I am not 
> > clear,
> can
> > anybody explain please?
> >
> 
> There is another problem related to concurrent operations on 
> win32 sema. Say two processes are doing semop(+1) 
> concurrently. Look at this code:
> 
>   /* Don't want the lock anymore */
>   sem_counts[sops[0].sem_num]++;
>   ReleaseSemaphore(cur_handle, sops[0].sem_op, NULL);
> 
> Except for the problem mentioned in the above thread that the 
> first line should be: sem_counts[sops[0].sem_num] += 
> sops[0].sem_op, the sem_counts[] are unprotected by anything, 
> so we might lose an update. Maybe I totally misunderstand something?

I've never really looked intot eh semaphore stuff, but if sem_counts[]
is in shared memory it should definitly be protected.

Looking at the code, it looks fairly complex to me. I don't really know
how sysv semaphores are supposed to work, or how we use them, but
perhaps the whole piece of code can be simplified?

//Magnus

---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

               http://archives.postgresql.org

Reply via email to