On 08/11/2006 06:42 PM, Garrett Rooney wrote:
> We've been fighting with some DSO/Pool related bugs in Subversion
> lately, and have basically come to the conclusion that there's no good
> solution, or at least no good solution that doesn't involve patching
> APR itself.
> 
> The problem, in short, is that when you use a pool to load a DSO you
> need to make sure that the pool lives longer than any code that might
> call a function within the DSO.  This is simple enough with most
> things, but when the code inside the DSO makes use of pools,

But there are still some other pitfalls. I faced one with an older subversion
version (1.2.3). Destroying the pool used to load the dso causes the dso to be
unloaded. But during the usage of the dso pointers to string literals inside 
the dso
had been saved. These pointers got used later and caused the subversion client 
to
SIGSEGV. To make things even more weird: This happened only on Linux not on 
Solaris and
during the usage of these pointers the dso was already loaded again.
The solution: On a modern Linux distribution with additional security features
loading a dso a second time does not guarantee that it is loaded to the
same address (in contrast to Solaris). So the pointers to the literals where
invalid. Ouch.
In order to fix this I did what you proposed: I used a global pool to load the 
dso.

Regards

RĂ¼diger


Reply via email to