[libvirt] JNA Error Callback could cause core dump.

Benjamin Wang (gendwang) gendwang at cisco.com
Thu Oct 18 15:48:22 UTC 2012


Hi,
  When I changed code as following:
public class Connect {
    // Load the native part
    static {
        Libvirt.INSTANCE.virInitialize();
        try {
            ErrorHandler.processError(Libvirt.INSTANCE);
        } catch (Exception e) {
            e.printStackTrace();
        }

  +     Libvirt.INSTANCE.virSetErrorFunc(null, new ErrorCallback());
}

The server will generate the following core dump:
Program terminated with signal 6, Aborted.
#0  0x0000003f9b030265 in raise () from /lib64/libc.so.6
(gdb) where
#0  0x0000003f9b030265 in raise () from /lib64/libc.so.6
#1  0x0000003f9b031d10 in abort () from /lib64/libc.so.6
#2  0x0000003f9b06a84b in __libc_message () from /lib64/libc.so.6
#3  0x0000003f9b07230f in _int_free () from /lib64/libc.so.6
#4  0x0000003f9b07276b in free () from /lib64/libc.so.6
#5  0x00002aaaacf46868 in ?? ()
#6  0x0000000000000000 in ?? ()


The problem was caused that when JNA call setErrorFunc, it will create ErrorCallback object. But when GC is executed, the object is GCed. But even I change code as following.
When GC is excuted, the callback object will be moved. Then C can't find this object. Both of scenarios will cause core dump. It seems that JNA mustn't provide ErrorCallback Class,
Because nobody can use this.
Please correct me.

public class Connect {
  +  private static final ErrorCallback callback = new ErrorCallback();

    // Load the native part
    static {
        Libvirt.INSTANCE.virInitialize();
        try {
            ErrorHandler.processError(Libvirt.INSTANCE);
        } catch (Exception e) {
            e.printStackTrace();
        }

  +     Libvirt.INSTANCE.virSetErrorFunc(null, callback);
}



B.R.
Benjamin Wang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20121018/385d3d02/attachment-0001.htm>


More information about the libvir-list mailing list