[gpgme] fork() problem

Stephan Menzel smenzel at gmx-gmbh.de
Tue Feb 20 16:51:27 CET 2007


Am Dienstag, 20. Februar 2007 15:09:56 schrieb Marcus Brinkmann:
> This is advice of mixed quality: It's good advice in the sense that it
> is better to avoid a feature than use it without thorough
> understanding of the issues.  But one should always be open to
> exploring new territory, even if it looks dangerous :)

Indeed.

> Concurrency is difficult to begin with.  It's a good idea to stick to
> one model of concurrency, threads or forks.  But the fork() calls that
> happen in GPGME are really fancy _posix_spawn() calls, not forks, and
> _posix_spawn() is reasonably harmless even in multi-threaded applications.

Well, the concurrency we are doing in the daemon in question is mostly done by 
pthread mutexes and boost mutexes (which are pthread* implemented as well as 
far as I know)
The daemon itself didn't have any problems with it's concurrency at this point 
before I used those calls even though it's running at very heavy load, 
without leaking mem btw. on several hundred machines so I take the liberty 
and assume it's concurrency is implemented reasonably stable at this stage.

> First, I think you are jumping to conclusions, which is always a bad
> idea.

Yes.

> Let's face it: At this point we have not the slightest idea 
> what was going on when you encountered the problems.  The descriptions
> you gave where by no means sufficient to make a diagnosis, so we just
> don't know where the problem was.

Well, If I can provide any more, just ask. I gave everything I had and 
everything I know about this. It was just too rare to be provoked.

> Now you found a work-around that 
> avoids the problem altogether, which is fine if it works for you,
> although I am a believer in the saying: "Problems that go away by
> themselves come back by themselves."

Well, thank bob it didn't go away by itself. I just moved it out of the area 
where it would be problematic into a seperate daemon where it's not too much 
of an issue if a process would crash from time to time. Which didn't happen 
so far btw. But it's a forking daemon rather than a threaded one.

> To answer your question: In some ways, GPG moves towards running as a
> daemon already.  It may be feasible in the future to avoid the fork()
> in some situations and replace it with connecting to a socket (in
> fact, for GPGSM you could do this with a little work on GPGSM and
> GPGME already). 

Well, that would be a nice option too. If I could communicate with such a 
service via Domain Sockets (or TCP) I would be in control of any blocking 
time.

> But this has nothing to do with extending use cases. 
> For all I know, GPGME supports your use case perfectly fine, and we
> can only file your error report under "mysterious" until further
> information is accumulated.

Well, it is mysterious indeed: Perhaps it was just some kind of a load 
situation gpgme is not experiencing very often.
But as I said, If I can provide any help accumulating further information, I'd 
be glad to help.

Greetings...

Stephan


-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : /pipermail/attachments/20070220/e316e443/attachment.pgp 


More information about the Gnupg-devel mailing list