From: Luis F. <lui...@gm...> - 2008-11-24 16:25:01
|
On Mon, Nov 24, 2008 at 2:13 PM, Santiago <sa...@gm...> wrote: > Hello > >> > Well, I think, my functions are reentrant, but I don't know yet, how I >> > can prevent fuse from creating threads (only for certain time). >> > When I change the underlaying filesystem, I'd like to block fuse, until >> > the new filesystem is mounted. >> > When I got this, I think my stuff will be thread safe. >> >> So, you have to use semaphores. You will not block FUSE, but will >> block your callbacks. > > Sorry for insisting. May be, I don't really understand the environment. > > Blocking a single callback seems not to be the problem. > I think, in parts it's already blocked, cause I do user interaction, but my > worry is, that fuse could create another thread for a quite different action. > > I would like to prevent that, so I need a semaphore, that blocks all my > callbacks at the same time. Better would be, not blocking all, but some > selected callbacks together. > Is there a way in fuse to realize that, or how can I solve that? You have to do it *in* your code. If you just want to block, not communication between the threads, you could do something like it: #include <pthread.h> pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&mylock); // block the others // do something exclusively pthread_mutex_unlock(&mylock); All the conclicting code must be surrounded by the lock/unlock calls. Beware to provide an unlock to each lock call. A common error is to fail/forget to unlock a mutex and then, everything just stops waiting forever. If you have groups of callbacks where you have to block all the group when a callback belonging to this group reaches the critical code, and no matter if a member of a different group reaches the critical code, then you may declare one different mutex per group. Best Regards! -- Luis Otavio de Colla Furquim Não alimente os pingos Don't feed the tribbles http://www.furquim.org/chironfs/ |