Re: Segfault JvCreateJavaVM when doing dlopen, dlclose, dlopen

Andrew Haley <[email protected]>
Newsgroups gmane.comp.gcc.java.devel
Message-ID <[email protected]>
Matthijs van de Water wrote:

> I'm having a problem with a Java .so (compiled with gcj-4.3 for ARM)
> that I use in a C++ program as a dynamically loadable plugin.
> The plugin works fine as long as I keep it loaded into memory. Because
> I'm working on an embedded system, I'd like to be able to unload the
> plugin when it's not in use to save memory.
> 
> I'm trying the following:
> 
> 1. dlopen() the .so, we call an init function in this .so plugin which
> uses JvCreateJaveVM() and JvAttatchCurrentThread()
> 2. Call some functions in the .so plugin. These functions use Java objects.
> 3. Unref all Java objects and call unload function in the .so that
> calls JvDetachCurrentThread()
> 4. dlclose() the .so
> 5. dlopen() the .so again (as step 1)
> 6. The code crashes with a SEGV when making calls into Java code (as step 2)
> 
> I've not been able to properly pinpoint the crash yet, but it seems to
> crash outside my own code (in libgcj somewhere).
> Before I spend hours of debugging, could one of you at least tell me
> if what I'm trying to do should be working?
>
> The one 'strange' thing I'm doing is that I've statically compiled a
> PIC version of libgcj.a into the .so plugin to avoid the huge
> libgcj.so on my embedded system. This has been working without
> problems so-far, however.

You're in unknown territory here.  What you're trying to do is pretty
hairy, and I have no way to know what the problem you're experiencing is
without debugging.

It would help if you could produce a test case that duplicates your problem.

Andrew.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.