From users-return-6072-apmail-qpid-users-archive=qpid.apache.org@qpid.apache.org Thu Mar 22 23:00:20 2012 Return-Path: X-Original-To: apmail-qpid-users-archive@www.apache.org Delivered-To: apmail-qpid-users-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id E1EBC9A90 for ; Thu, 22 Mar 2012 23:00:20 +0000 (UTC) Received: (qmail 79923 invoked by uid 500); 22 Mar 2012 23:00:20 -0000 Delivered-To: apmail-qpid-users-archive@qpid.apache.org Received: (qmail 79900 invoked by uid 500); 22 Mar 2012 23:00:20 -0000 Mailing-List: contact users-help@qpid.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: users@qpid.apache.org Delivered-To: mailing list users@qpid.apache.org Received: (qmail 79891 invoked by uid 99); 22 Mar 2012 23:00:20 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 22 Mar 2012 23:00:20 +0000 X-ASF-Spam-Status: No, hits=1.5 required=5.0 tests=HTML_MESSAGE,RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of lefthandmagic@gmail.com designates 209.85.160.170 as permitted sender) Received: from [209.85.160.170] (HELO mail-gy0-f170.google.com) (209.85.160.170) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 22 Mar 2012 23:00:14 +0000 Received: by ghbg2 with SMTP id g2so2233361ghb.15 for ; Thu, 22 Mar 2012 15:59:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=T11TWJ4iPZppiEsH1ApvRanK3cHqdedZJ9Swom6Aunc=; b=lXuthTeLnz9sDbW5gIDn1MO5gGOvBYPQIryQgEycllAuLTRzIDjFCzpnJsZ7Od27/K JCWKSCtQz8YDIr8/70/UFYoSGH81YMPRG+ewsIQt3/650sloUacyQ+iQ6IsTYm7OCR+h XNrv/Yc8WLBS2K/qsoNVsjNHZNH2FgFL7vgTIRcbqSnDEoaB1FRkXaEBFdMD3OFE7xS+ mVort3LEgYeJLoSePb/Drh/EILWufs1qpnCxmRvfOOHXOW2Ro3iuEPC/JI2VJeBCJWWz x0favAviHIkkwVB7UBT6fkDdrVcV4QI4RIEMacOolUz2+0EFp5ryWAbbeysVadkLhmG6 y9jg== MIME-Version: 1.0 Received: by 10.68.73.138 with SMTP id l10mr23921035pbv.22.1332457192865; Thu, 22 Mar 2012 15:59:52 -0700 (PDT) Received: by 10.68.56.103 with HTTP; Thu, 22 Mar 2012 15:59:52 -0700 (PDT) Date: Thu, 22 Mar 2012 15:59:52 -0700 Message-ID: Subject: Consumer.close() and session.rollback() deadlocks in the JMS client. From: Praveen M To: users@qpid.apache.org Content-Type: multipart/mixed; boundary=f46d041b4a82a8bedb04bbdcddf7 X-Virus-Checked: Checked by ClamAV on apache.org --f46d041b4a82a8bedb04bbdcddf7 Content-Type: multipart/alternative; boundary=f46d041b4a82a8bec904bbdcddf5 --f46d041b4a82a8bec904bbdcddf5 Content-Type: text/plain; charset=ISO-8859-1 Hi, I am using the 0.16 codeline and am working with the Java Broker and JMS client. I the following scenario, 1) Create transacted session 2) create Queue A. 3) Create a consumer and register a callback handler to the queue A using the transacted session. 2) Enqueue a message to the queue A. 3) Close the consumer in the inititalization thread. 4) On the onMessage() callback of the handler try to rollback the session. The consumer.close() call from the initialization thread and the rollback() call from the handler thread arrive at a deadlock. I've attached a test, which simulates the scenario explained above. I tried to investigate this further a little bit, and found the actual 2 threads that get into the deadlock. The deadlock is on the failovermutex() lock, The consumer thread grabs the failovermutex() lock first and waits on the session dispatcher lock, whereas the handler thread, holds the dispatcher lock, and then tries to grab the failovermutex() lock. I've attached the actual stack traces of the deadlock, along with locks grabbed list. I'm curious is this is a issue with using the java broker only, as I see that, the sync() on the rollback call actually tries to set an exception(Please see stack trace file attached). It will be great if someone could let me know what is going on, and help fix this. I've logged a JIRA for this here https://issues.apache.org/jira/browse/QPID-3911 Thanks a lot, -- -Praveen --f46d041b4a82a8bec904bbdcddf5 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hi,=A0

=A0 =A0I am using the 0.16 codeline and am workin= g with the Java Broker and JMS client.

=A0 =A0 = I the following scenario,

1) Create transacted ses= sion
2) create Queue A.
3) Create a consumer and register a callb= ack handler to the queue A using the transacted session.
2) Enque= ue a message to the queue A.
3) Close the consumer in the initita= lization thread.
4) On the onMessage() callback of the handler try to rollback the sess= ion.

The consumer.close() call from the initializa= tion thread and the rollback() call from the handler thread arrive at a dea= dlock.

I've attached a test, which simulates the scenario = explained above.

I tried to investigate this furth= er a little bit, and found the actual 2 threads that get into the deadlock.= =A0

The deadlock is on the failovermutex() lock,
=
The consumer thread grabs the failovermutex() lock first and= waits on the session dispatcher lock,

whereas the= handler thread, holds the dispatcher lock, and then tries to grab the fail= overmutex() lock.

I've attached the actual stack traces of the deadlo= ck, along with locks grabbed list.

I'm curious= is this is a issue with using the java broker only, as I see that,

the sync() on the rollback call actually tries to set a= n exception(Please see stack trace file attached).

It will be great if someone could let me know what is going on, and help f= ix this.

I've logged a JIRA for this here
--f46d041b4a82a8bec904bbdcddf5-- --f46d041b4a82a8bedb04bbdcddf7 Content-Type: text/plain; charset=US-ASCII; name="DeadLockStackTraces.txt" Content-Disposition: attachment; filename="DeadLockStackTraces.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h04eg6i41 Rm91bmQgb25lIEphdmEtbGV2ZWwgZGVhZGxvY2s6Cj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CiJEaXNwYXRjaGVyLUNoYW5uZWwtMCI6CiAgIHdhaXRpbmcgdG8gbG9jayBtb25pdG9yIDB4 MDAwMDAwMDAwMWU2NWVjOCAob2JqZWN0IAoweDAwMDAwMDA3YzE4MGJkNTgsIGEgamF2YS5sYW5n Lk9iamVjdCksCiAgIHdoaWNoIGlzIGhlbGQgYnkgIm1haW4iCiJtYWluIjoKICAgd2FpdGluZyB0 byBsb2NrIG1vbml0b3IgMHgwMDAwMDAwMDAxY2ZmYmM4IChvYmplY3QgCjB4MDAwMDAwMDdjMmUx MGMwOCwgYSBqYXZhLmxhbmcuT2JqZWN0KSwKICAgd2hpY2ggaXMgaGVsZCBieSAiRGlzcGF0Y2hl ci1DaGFubmVsLTAiCgpKYXZhIHN0YWNrIGluZm9ybWF0aW9uIGZvciB0aGUgdGhyZWFkcyBsaXN0 ZWQgYWJvdmU6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQoiRGlzcGF0Y2hlci1DaGFubmVsLTAiOgogICAgIGF0IApvcmcuYXBhY2hlLnFwaWQuY2xp ZW50LkFNUUNvbm5lY3Rpb24uZXhjZXB0aW9uUmVjZWl2ZWQoQU1RQ29ubmVjdGlvbi5qYXZhOjEy NTUpCiAgICAgLSB3YWl0aW5nIHRvIGxvY2sgPDB4MDAwMDAwMDdjMTgwYmQ1OD4gKGEgamF2YS5s YW5nLk9iamVjdCkKICAgICBhdCAKb3JnLmFwYWNoZS5xcGlkLmNsaWVudC5BTVFTZXNzaW9uXzBf MTAuc2V0Q3VycmVudEV4Y2VwdGlvbihBTVFTZXNzaW9uXzBfMTAuamF2YToxMDU3KQogICAgIGF0 IApvcmcuYXBhY2hlLnFwaWQuY2xpZW50LkFNUVNlc3Npb25fMF8xMC5zeW5jKEFNUVNlc3Npb25f MF8xMC5qYXZhOjEwMzQpCiAgICAgYXQgCm9yZy5hcGFjaGUucXBpZC5jbGllbnQuQU1RU2Vzc2lv bl8wXzEwLnNlbmRTdXNwZW5kQ2hhbm5lbChBTVFTZXNzaW9uXzBfMTAuamF2YTo4NTEpCiAgICAg YXQgCm9yZy5hcGFjaGUucXBpZC5jbGllbnQuQU1RU2Vzc2lvbi5zdXNwZW5kQ2hhbm5lbChBTVFT ZXNzaW9uLmphdmE6MzA3NSkKICAgICAtIGxvY2tlZCA8MHgwMDAwMDAwN2MyYzNkMzMwPiAoYSBq YXZhLmxhbmcuT2JqZWN0KQogICAgIGF0IG9yZy5hcGFjaGUucXBpZC5jbGllbnQuQU1RU2Vzc2lv bi5yb2xsYmFjayhBTVFTZXNzaW9uLmphdmE6MTg1NCkKICAgICAtIGxvY2tlZCA8MHgwMDAwMDAw N2MyYzNkMzMwPiAoYSBqYXZhLmxhbmcuT2JqZWN0KQogICAgIGF0IApRcGlkQ29uc3VtZXJDbG9z ZVJvbGxiYWNrRGVhZGxvY2skUXBpZE1xSGFuZGxlci5vbk1lc3NhZ2UoUXBpZENvbnN1bWVyQ2xv c2VSb2xsYmFja0RlYWRsb2NrLmphdmE6MjA4KQogICAgIGF0IApvcmcuYXBhY2hlLnFwaWQuY2xp ZW50LkJhc2ljTWVzc2FnZUNvbnN1bWVyLm5vdGlmeU1lc3NhZ2UoQmFzaWNNZXNzYWdlQ29uc3Vt ZXIuamF2YTo3NDUpCiAgICAgYXQgCm9yZy5hcGFjaGUucXBpZC5jbGllbnQuQmFzaWNNZXNzYWdl Q29uc3VtZXJfMF8xMC5ub3RpZnlNZXNzYWdlKEJhc2ljTWVzc2FnZUNvbnN1bWVyXzBfMTAuamF2 YToxNDEpCiAgICAgYXQgCm9yZy5hcGFjaGUucXBpZC5jbGllbnQuQmFzaWNNZXNzYWdlQ29uc3Vt ZXIubm90aWZ5TWVzc2FnZShCYXNpY01lc3NhZ2VDb25zdW1lci5qYXZhOjcxOSkKICAgICBhdCAK b3JnLmFwYWNoZS5xcGlkLmNsaWVudC5CYXNpY01lc3NhZ2VDb25zdW1lcl8wXzEwLm5vdGlmeU1l c3NhZ2UoQmFzaWNNZXNzYWdlQ29uc3VtZXJfMF8xMC5qYXZhOjE4NikKICAgICBhdCAKb3JnLmFw YWNoZS5xcGlkLmNsaWVudC5CYXNpY01lc3NhZ2VDb25zdW1lcl8wXzEwLm5vdGlmeU1lc3NhZ2Uo QmFzaWNNZXNzYWdlQ29uc3VtZXJfMF8xMC5qYXZhOjU0KQogICAgIGF0IApvcmcuYXBhY2hlLnFw aWQuY2xpZW50LkFNUVNlc3Npb24kRGlzcGF0Y2hlci5ub3RpZnlDb25zdW1lcihBTVFTZXNzaW9u LmphdmE6MzQ2NykKICAgICBhdCAKb3JnLmFwYWNoZS5xcGlkLmNsaWVudC5BTVFTZXNzaW9uJERp c3BhdGNoZXIuZGlzcGF0Y2hNZXNzYWdlKEFNUVNlc3Npb24uamF2YTozNDA2KQogICAgIC0gbG9j a2VkIDwweDAwMDAwMDA3YzJjM2QzNTA+IChhIGphdmEubGFuZy5PYmplY3QpCiAgICAgLSBsb2Nr ZWQgPDB4MDAwMDAwMDdjMmUxMGMwOD4gKGEgamF2YS5sYW5nLk9iamVjdCkKICAgICBhdCAKb3Jn LmFwYWNoZS5xcGlkLmNsaWVudC5BTVFTZXNzaW9uJERpc3BhdGNoZXIuYWNjZXNzJDEwMDAoQU1R U2Vzc2lvbi5qYXZhOjMxODApCiAgICAgYXQgb3JnLmFwYWNoZS5xcGlkLmNsaWVudC5BTVFTZXNz aW9uLmRpc3BhdGNoKEFNUVNlc3Npb24uamF2YTozMTczKQogICAgIGF0IApvcmcuYXBhY2hlLnFw aWQuY2xpZW50Lm1lc3NhZ2UuVW5wcm9jZXNzZWRNZXNzYWdlLmRpc3BhdGNoKFVucHJvY2Vzc2Vk TWVzc2FnZS5qYXZhOjU0KQogICAgIGF0IApvcmcuYXBhY2hlLnFwaWQuY2xpZW50LkFNUVNlc3Np b24kRGlzcGF0Y2hlci5ydW4oQU1RU2Vzc2lvbi5qYXZhOjMzMjkpCiAgICAgYXQgamF2YS5sYW5n LlRocmVhZC5ydW4oVGhyZWFkLmphdmE6NjM2KQoibWFpbiI6CiAgICAgYXQgCm9yZy5hcGFjaGUu cXBpZC5jbGllbnQuQU1RU2Vzc2lvbiREaXNwYXRjaGVyLnJlamVjdFBlbmRpbmcoQU1RU2Vzc2lv bi5qYXZhOjMyMTEpCiAgICAgLSB3YWl0aW5nIHRvIGxvY2sgPDB4MDAwMDAwMDdjMmUxMGMwOD4g KGEgamF2YS5sYW5nLk9iamVjdCkKICAgICBhdCAKb3JnLmFwYWNoZS5xcGlkLmNsaWVudC5BTVFT ZXNzaW9uLmNvbmZpcm1Db25zdW1lckNhbmNlbGxlZChBTVFTZXNzaW9uLmphdmE6OTAzKQogICAg IGF0IApvcmcuYXBhY2hlLnFwaWQuY2xpZW50LkJhc2ljTWVzc2FnZUNvbnN1bWVyXzBfMTAuc2Vu ZENhbmNlbChCYXNpY01lc3NhZ2VDb25zdW1lcl8wXzEwLmphdmE6MTcwKQogICAgIGF0IApvcmcu YXBhY2hlLnFwaWQuY2xpZW50LkJhc2ljTWVzc2FnZUNvbnN1bWVyLmNsb3NlKEJhc2ljTWVzc2Fn ZUNvbnN1bWVyLmphdmE6NTkzKQogICAgIC0gbG9ja2VkIDwweDAwMDAwMDA3YzE4MGJkNTg+IChh IGphdmEubGFuZy5PYmplY3QpCiAgICAgYXQgCm9yZy5hcGFjaGUucXBpZC5jbGllbnQuQmFzaWNN ZXNzYWdlQ29uc3VtZXIuY2xvc2UoQmFzaWNNZXNzYWdlQ29uc3VtZXIuamF2YTo1NTUpCiAgICAg YXQgClFwaWRDb25zdW1lckNsb3NlUm9sbGJhY2tEZWFkbG9jay5tYWluKFFwaWRDb25zdW1lckNs b3NlUm9sbGJhY2tEZWFkbG9jay5qYXZhOjc3KQoKRm91bmQgMSBkZWFkbG9jay4KCgo= --f46d041b4a82a8bedb04bbdcddf7 Content-Type: text/x-java; charset=US-ASCII; name="QpidConsumerCloseRollbackDeadlock.java" Content-Disposition: attachment; filename="QpidConsumerCloseRollbackDeadlock.java" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h04e50cs0 aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuKjsKaW1wb3J0 IGphdmF4Lmptcy4qOwppbXBvcnQgamF2YXgubmFtaW5nLio7CgpjbGFzcyBRcGlkQ29uc3VtZXJD bG9zZVJvbGxiYWNrRGVhZGxvY2sgewoKCXByaXZhdGUgdHJhbnNpZW50IENvbm5lY3Rpb24gY29u bmVjdGlvbjsKCXRyYW5zaWVudCBTZXNzaW9uIHNlc3Npb247Cglwcml2YXRlIHRyYW5zaWVudCBN ZXNzYWdlUHJvZHVjZXIgZW1wdHlQcm9kdWNlcjsKCS8vIFRoZSBVUkwgVXNlZCB0byBjb25uZWN0 IHRvdCBoZSBicm9rZXIuCglwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29ublVybCA9ICJhbXFwOi8v Z3Vlc3Q6Z3Vlc3RAdGVzdC8/YnJva2VybGlzdD0ndGNwOi8vbG9jYWxob3N0OjU2NzI/dGNwX25v ZGVsYXk9J3RydWUnJyZtYXhfcHJlZmV0Y2g9JzEnIjsKCglmaW5hbCBTdHJpbmcgSU5JVElBTF9D T05URVhUX0ZBQ1RPUlkgPSAib3JnLmFwYWNoZS5xcGlkLmpuZGkuUHJvcGVydGllc0ZpbGVJbml0 aWFsQ29udGV4dEZhY3RvcnkiOwoKCWZpbmFsIFN0cmluZyBDT05ORUNUSU9OX0pORElfTkFNRSA9 ICJsb2NhbCI7CgoJcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBfY3R4OwoJTWFwPFN0cmluZywgRGVz dGluYXRpb24+IHF1ZXVlTmFtZVRvRGVzdGluYXRpb24gPSBuZXcgSGFzaE1hcDxTdHJpbmcsIERl c3RpbmF0aW9uPigpOwoKCS8vIHRoZSBvcHRpb25zIHVzZWQgd2hlbiBjcmVhdGluZyBhIG5ldyBx dWV1ZQoJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG9wdGlvbnMgPSAiO3tjcmVhdGU6IGFsd2F5cyAs IG5vZGUgOiB7dHlwZSA6IHF1ZXVlLCBkdXJhYmxlIDogdHJ1ZX19IjsKCglwdWJsaWMgc3RhdGlj IHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgkJU3RyaW5nIHF1ZXVlTmFtZSA9ICJUZXN0aW5n USI7CgkJUXBpZENvbnN1bWVyQ2xvc2VSb2xsYmFja0RlYWRsb2NrIHRlc3QgPSBudWxsOwoJCU1l c3NhZ2VDb25zdW1lciBjb25zdW1lciA9IG51bGw7CgkJUXBpZENvbnN1bWVyQ2xvc2VSb2xsYmFj a0RlYWRsb2NrLlFwaWRNcUhhbmRsZXIgaGFuZGxlciA9IG51bGw7CgkJdHJ5IHsKCQkJdGVzdCA9 IG5ldyBRcGlkQ29uc3VtZXJDbG9zZVJvbGxiYWNrRGVhZGxvY2soKTsKCgkJCS8vIG9wZW4gY29u bmVjdGlvbiwgdHJhbnNhY3RlZCBzZXNzaW9uIHRvIHRoZSBicm9rZXIKCQkJdGVzdC5vcGVuKCk7 CgkJCUNvdW50RG93bkxhdGNoIGxhdGNoID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwoKCQkJLy8g Y3JlYXRlIFRoZSBxdWV1ZXMgaW4gdGhlIGJyb2tlcgoJCQl0ZXN0LmNyZWF0ZVF1ZXVlKHF1ZXVl TmFtZSk7CgoJCQkvLyByZWdpc3RlciB0aGUgaGFuZGxlcnMgZm9yIHRoZSBxdWV1ZS4KCQkJaGFu ZGxlciA9IG5ldyBRcGlkTXFIYW5kbGVyKHRlc3Quc2Vzc2lvbiwgbGF0Y2gpOwoJCQljb25zdW1l ciA9IHRlc3QubGlzdGVuKHF1ZXVlTmFtZSwgaGFuZGxlcik7CgoJCX0gY2F0Y2ggKFRocm93YWJs ZSBlKSB7CgkJCWUucHJpbnRTdGFja1RyYWNlKCk7CgkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0 aW9uKGUpOwoJCX0KCgkJdHJ5IHsKCQkJLy8gZW5xdWV1ZSAxIG1lc3NhZ2UgYW5kIGNvbW1pdCB0 aGF0IG1lc3NhZ2UKCQkJdGVzdC5lbnF1ZXVlKHF1ZXVlTmFtZSwgIkFCQ0RFRiIpOwoJCQl0ZXN0 LmNvbW1pdFNlc3Npb24oKTsKCQl9IGNhdGNoIChUaHJvd2FibGUgZSkgewoJCQllLnByaW50U3Rh Y2tUcmFjZSgpOwoJCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKCQl9CgoJCXRyeSB7 CgkJCXRlc3Qud2FpdE9uSGFuZGxlcihoYW5kbGVyKTsKCQkJY29uc3VtZXIuY2xvc2UoKTsKCQkJ dGVzdC5jbG9zZSgpOwoJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CgoJCX0KCX0KCgkvKioKCSAq IE9wZW4gYSBuZXcgY29ubmVjdGlvbiB0byB0aGUgYnJva2VyIGFuZCBzdGFydCBpdC4KCSAqLwoJ cHVibGljIHZvaWQgb3BlbigpIHRocm93cyBFeGNlcHRpb24gewoJCS8vIFNldCB0aGUgcHJvcGVy dGllcyAuLi4KCQlQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBuZXcgUHJvcGVydGllcygpOwoJCXBy b3BlcnRpZXMKCQkJCS5wdXQoQ29udGV4dC5JTklUSUFMX0NPTlRFWFRfRkFDVE9SWSwgSU5JVElB TF9DT05URVhUX0ZBQ1RPUlkpOwoJCXByb3BlcnRpZXMucHV0KCJjb25uZWN0aW9uZmFjdG9yeS4i ICsgQ09OTkVDVElPTl9KTkRJX05BTUUsIGNvbm5VcmwpOwoKCQl0cnkgewoJCQlfY3R4ID0gbmV3 IEluaXRpYWxDb250ZXh0KHByb3BlcnRpZXMpOwoJCX0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBl KSB7CgkJCVN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IgU2V0dGluZyB1cCBKTkRJIENvbnRleHQ6 IiArIGUpOwoJCX0KCQljb25uZWN0aW9uID0gKChDb25uZWN0aW9uRmFjdG9yeSkgX2N0eC5sb29r dXAoQ09OTkVDVElPTl9KTkRJX05BTUUpKQoJCQkJLmNyZWF0ZUNvbm5lY3Rpb24oKTsKCgkJLy8g Y3JlYXRlIHRyYW5zYWN0ZWQgc2Vzc2lvbgoJCXNlc3Npb24gPSBjb25uZWN0aW9uLmNyZWF0ZVNl c3Npb24odHJ1ZSwgU2Vzc2lvbi5TRVNTSU9OX1RSQU5TQUNURUQpOwoJCWVtcHR5UHJvZHVjZXIg PSBzZXNzaW9uLmNyZWF0ZVByb2R1Y2VyKG51bGwpOwoJCWVtcHR5UHJvZHVjZXIuc2V0RGVsaXZl cnlNb2RlKERlbGl2ZXJ5TW9kZS5QRVJTSVNURU5UKTsKCQljb25uZWN0aW9uLnN0YXJ0KCk7Cgl9 CgoJLyoqCgkgKiBDbG9zZSB0aGUgY29ubmVjdGlvbiB0byB0aGUgYnJva2VyCgkgKi8KCXB1Ymxp YyB2b2lkIGNsb3NlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CgkJdHJ5IHsKCQkJaWYgKHNlc3Npb24g IT0gbnVsbCkgewoJCQkJc2Vzc2lvbi5jbG9zZSgpOwoJCQl9CgkJfSBmaW5hbGx5IHsKCQkJdHJ5 IHsKCQkJCWlmIChjb25uZWN0aW9uICE9IG51bGwpIHsKCQkJCQljb25uZWN0aW9uLmNsb3NlKCk7 CgkJCQl9CgkJCX0gZmluYWxseSB7CgkJCQlpZiAoX2N0eCAhPSBudWxsKSB7CgkJCQkJX2N0eC5j bG9zZSgpOwoJCQkJfQoJCQl9CgkJfQoKCX0KCgkvKioKCSAqIENyZWF0ZXMgYSBuZXcgcXVldWUg YW5kIGFkZHMgaXQgdG8gdGhlIGRlc3RpbmF0aW9uIHRvIHF1ZXVlIG1hcC4KCSAqIAoJICovCglw dWJsaWMgU3RyaW5nIGNyZWF0ZVF1ZXVlKFN0cmluZyBxdWV1ZU5hbWUpIHRocm93cyBFeGNlcHRp b24gewoJCURlc3RpbmF0aW9uIGRlc3RpbmF0aW9uID0gc2Vzc2lvbi5jcmVhdGVRdWV1ZShxdWV1 ZU5hbWUgKyBvcHRpb25zKTsKCQlpZiAoZGVzdGluYXRpb24gIT0gbnVsbCkgewoJCQlxdWV1ZU5h bWVUb0Rlc3RpbmF0aW9uLnB1dChxdWV1ZU5hbWUsIGRlc3RpbmF0aW9uKTsKCQkJcmV0dXJuIHF1 ZXVlTmFtZTsKCQl9IGVsc2UgewoJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlF1ZXVlIENyZWF0ZWQg TnVsbCIpOwoJCQlyZXR1cm4gbnVsbDsKCQl9Cgl9CgoJLyoqCgkgKiBDcmVhdGUgYSBsaXN0ZW5l ciBmb3IgdGhlIHF1ZXVlIGFuZCByZXR1cm5zIHRoZSBtZXNzYWdlIGNvbnN1bWVyCgkgKiAKCSAq IEByZXR1cm4KCSAqLwoJcHVibGljIE1lc3NhZ2VDb25zdW1lciBsaXN0ZW4oU3RyaW5nIHAycENv bnN1bWVyLCBRcGlkTXFIYW5kbGVyIGhhbmRsZXIpCgkJCXRocm93cyBFeGNlcHRpb24gewoJCURl c3RpbmF0aW9uIGRlc3RpbmF0aW9uID0gcXVldWVOYW1lVG9EZXN0aW5hdGlvbi5nZXQocDJwQ29u c3VtZXIpOwoJCU1lc3NhZ2VDb25zdW1lciBjb25zdW1lciA9IHNlc3Npb24uY3JlYXRlQ29uc3Vt ZXIoZGVzdGluYXRpb24pOwoJCWNvbnN1bWVyLnNldE1lc3NhZ2VMaXN0ZW5lcihoYW5kbGVyKTsK CQlyZXR1cm4gY29uc3VtZXI7Cgl9CgoJLyoqCgkgKiBXYWl0IGZvciBjb25zdW1lcnMgdG8gY29t cGxldGUuCgkgKi8KCXByaXZhdGUgdm9pZCB3YWl0T25IYW5kbGVyKFFwaWRNcUhhbmRsZXIgaGFu ZGxlcikgdGhyb3dzIEV4Y2VwdGlvbiB7CgoJCWJvb2xlYW4gaGFuZGxlckNvbXBsZXRlZCA9IGhh bmRsZXIubGF0Y2guYXdhaXQoNjAsIFRpbWVVbml0LlNFQ09ORFMpOwoJCWlmICghaGFuZGxlckNv bXBsZXRlZCkgewoJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRoZSB0ZXN0IGZhaWxlZCB0byBjb21w bGV0ZSIpOwoJCX0KCgl9CgoJLyoqCgkgKiBFbnF1ZXVlIE1lc3NhZ2VzCgkgKi8KCXB1YmxpYyBT dHJpbmcgZW5xdWV1ZShTdHJpbmcgcDJwQ29uc3VtZXIsIFN0cmluZyBwYXlsb2FkKSB0aHJvd3Mg RXhjZXB0aW9uIHsKCQlNYXBNZXNzYWdlIG1lc3NhZ2UgPSBzZXNzaW9uLmNyZWF0ZU1hcE1lc3Nh Z2UoKTsKCQltZXNzYWdlLnNldFN0cmluZygiQm9keSIsIHBheWxvYWQpOwoJCURlc3RpbmF0aW9u IGRlc3RpbmF0aW9uID0gcXVldWVOYW1lVG9EZXN0aW5hdGlvbi5nZXQocDJwQ29uc3VtZXIpOwoJ CWVtcHR5UHJvZHVjZXIuc2VuZChkZXN0aW5hdGlvbiwgbWVzc2FnZSk7CgkJcmV0dXJuIG1lc3Nh Z2UuZ2V0Sk1TTWVzc2FnZUlEKCk7Cgl9CgoJLyoqCgkgKiBDb21taXQgdGhlIHNlc3Npb24KCSAq LwoJcHVibGljIHZvaWQgY29tbWl0U2Vzc2lvbigpIHRocm93cyBFeGNlcHRpb24gewoJCXNlc3Np b24uY29tbWl0KCk7Cgl9CgoJLyoqCgkgKiBUaGUgY2FsbGJhY2sgaGFuZGxlcgoJICovCglzdGF0 aWMgcHVibGljIGNsYXNzIFFwaWRNcUhhbmRsZXIgaW1wbGVtZW50cyBNZXNzYWdlTGlzdGVuZXIg ewoKCQlmaW5hbCBDb3VudERvd25MYXRjaCBsYXRjaDsKCQlmaW5hbCBTZXNzaW9uIHNlc3Npb247 CgoJCXB1YmxpYyBRcGlkTXFIYW5kbGVyKFNlc3Npb24gc2Vzc2lvbiwgQ291bnREb3duTGF0Y2gg c3VwcGxpZWRMYXRjaCkgewoJCQl0aGlzLnNlc3Npb24gPSBzZXNzaW9uOwoJCQl0aGlzLmxhdGNo ID0gc3VwcGxpZWRMYXRjaDsKCQl9CgoJCUBPdmVycmlkZQoJCWZpbmFsIHB1YmxpYyB2b2lkIG9u TWVzc2FnZShNZXNzYWdlIGFyZzApIHsKCQkJdHJ5IHsKCQkJCS8vIGNvdW50ZG93biB0aGUgbGF0 Y2ggYW5kIHJvbGxiYWNrIHRvIHNpbXVsYXRlIGEgZmFpbHVyZS4KCQkJCWxhdGNoLmNvdW50RG93 bigpOwoJCQkJc2Vzc2lvbi5yb2xsYmFjaygpOwoJCQl9IGNhdGNoIChFeGNlcHRpb24geCkgewoJ CQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oeCk7CgkJCX0KCQl9CgoJfQoKfQo= --f46d041b4a82a8bedb04bbdcddf7 Content-Type: text/plain; charset=us-ascii --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org For additional commands, e-mail: users-help@qpid.apache.org --f46d041b4a82a8bedb04bbdcddf7--