This is the mail archive of the java@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Segfault JvCreateJavaVM when doing dlopen, dlclose, dlopen


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]