Ah, okay, now I understand what you want to say. You have two threads A and B. When A runs on its own then it's just fine, but when you add B (that triggers an exception on purpose and ignores it) then A picks it up and reports it. This is the point where thread safety comes to mind. libvirt stores errors in thread-local-storage. It uses pthread_key_create/pthread_{get,set}specific for this (or TlsAlloc/Tls{Get,Set}Value on Windows). I think what's happening here is that all your threads in Java share the same thread-local-storage. Therefore, thread A can pickup the error triggered by thread B, that should not happen. I'm not sure how to fix that. Matthias 2010/9/3 Ravi Pawar <ravifc@xxxxxxxxx>: > > here is the stacktrace: > > > org.libvirt.LibvirtException: invalid argument in cannot pin vcpus on an > inactive domain > at org.libvirt.ErrorHandler.processError(Unknown Source) > at org.libvirt.Connect.processError(Unknown Source) > at org.libvirt.Connect.storagePoolLookupByName(Unknown Source) > at TestMultiThreadingLibvirt.run(TestMultiThreadingLibvirt.java:25) > at java.lang.Thread.run(Thread.java:619) > libvir: QEMU error : invalid argument in cannot pin vcpus on an inactive > domain > from your stacktrace i could find out that you have printed the stacktrace > in TestMultiThreadingLibvirtWithError class. please do check the code i > have pasted below for the second thread. > > > public class TestMultiThreadingLibvirtWithError implements Runnable > { > Connect m_conn = null; > public TestMultiThreadingLibvirtWithError(Connect conn) > { > m_conn = conn; > > } > @Override > public void run() { > > > try { > Domain d = > m_conn.domainLookupByName("afzaltestmachine"); > VcpuInfo[] vcpuInfo = d.getVcpusInfo(); > > > } > catch (Exception e) > { > //we are explicitly eating up the exception here > and we know Exception is going to occur here. > > } > > } > > } > > > please let me know if my you have more queries to my problem. > > On Fri, Sep 3, 2010 at 2:37 PM, Matthias Bolte > <matthias.bolte@xxxxxxxxxxxxxx> wrote: >> >> Well, if the domain is not running then I get this exception with >> libvirt 0.6.3 and libvirt-java 0.4.2: >> >> org.libvirt.LibvirtException: invalid argument in cannot pin vcpus on >> an inactive domain >> at org.libvirt.ErrorHandler.processError(Unknown Source) >> at org.libvirt.Connect.processError(Unknown Source) >> at org.libvirt.Domain.processError(Unknown Source) >> at org.libvirt.Domain.getVcpusInfo(Unknown Source) >> at >> TestMultiThreadingLibvirtWithError.run(TestMultiThreadingLibvirtWithError.java:20) >> at java.lang.Thread.run(Thread.java:636) >> >> The error message is misleading and current git version gives this >> exception when the domain is not running: >> >> org.libvirt.LibvirtException: Requested operation is not valid: cannot >> list vcpu pinning for an inactive domain >> at org.libvirt.ErrorHandler.processError(Unknown Source) >> at org.libvirt.Connect.processError(Unknown Source) >> at org.libvirt.Domain.processError(Unknown Source) >> at org.libvirt.Domain.getVcpusInfo(Unknown Source) >> at >> TestMultiThreadingLibvirtWithError.run(TestMultiThreadingLibvirtWithError.java:20) >> at java.lang.Thread.run(Thread.java:636) >> >> And that's perfectly valid, as the complete vCPU information is only >> available when the domain is running, therefore the exception is >> expected when you call getVcpusInfo on a non-running domain. Also this >> has nothing to do with thread-safety. >> >> If this isn't the exception you're referring to, then please show a >> stacktrace of the exception you're seeing. >> >> Matthias >> >> 2010/9/3 Ravi Pawar <ravifc@xxxxxxxxx>: >> > thank you for the reply and time you spend. >> > your guest domain should not be running and then run my program without >> > any >> > change.you will see an exception where you dont expect it to occur. >> > libvirt : 0.6.3 and libvirt-java: 0.4.2 i am using. Please let me know >> > if i >> > miss to provide you any other details. >> > >> > >> > On Fri, Sep 3, 2010 at 3:29 AM, Matthias Bolte >> > <matthias.bolte@xxxxxxxxxxxxxx> wrote: >> >> >> >> 2010/9/2 Ravi Pawar <ravifc@xxxxxxxxx>: >> >> > please check the java file attached they throws the exception in case >> >> > of >> >> > passing. >> >> > please let me know if i am missing something. >> >> > >> >> >> >> Can you explain in more detail what one should do to reproduce the >> >> problem you seem to see with the attached code? Also you didn't >> >> mention which versions of libvirt and libvirt-java you're using. >> >> >> >> When I run you example code (with a guest name that exists in my setup >> >> and libvirt and libvirt-java form current git head) I don't see any >> >> exceptions. Even when I add e.printStackTrace() to the catch block of >> >> TestMultiThreadingLibvirtWithError I don't see exceptions. >> >> >> >> $ java -classpath >> >> ./target/libvirt-0.4.6.jar:./ravi:/usr/share/java/jna.jar Test >> >> start class 0 >> >> start class 1 >> >> start class 2 >> >> start class 3 >> >> start class 4 >> >> start class 5 >> >> start class 6 >> >> start class 7 >> >> start class 8 >> >> start class 9 >> >> >> >> So this works for me. >> >> >> >> Matthias >> > >> > >> > >> > -- >> > Thanks & Regards >> > >> > Ravi Pawar >> > > > > > -- > Thanks & Regards > > Ravi Pawar >