From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15590 invoked by alias); 3 May 2010 19:53:28 -0000 Received: (qmail 15570 invoked by uid 22791); 3 May 2010 19:53:25 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,SPF_HELO_PASS,TW_FC,TW_UF,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.44.51) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 03 May 2010 19:53:18 +0000 Received: from kpbe19.cbf.corp.google.com (kpbe19.cbf.corp.google.com [172.25.105.83]) by smtp-out.google.com with ESMTP id o43JrGrT008245 for ; Mon, 3 May 2010 12:53:16 -0700 Received: from pwi10 (pwi10.prod.google.com [10.241.219.10]) by kpbe19.cbf.corp.google.com with ESMTP id o43JrEpb027675 for ; Mon, 3 May 2010 12:53:15 -0700 Received: by pwi10 with SMTP id 10so1317874pwi.14 for ; Mon, 03 May 2010 12:53:14 -0700 (PDT) MIME-Version: 1.0 Received: by 10.141.88.12 with SMTP id q12mr3860031rvl.188.1272916394619; Mon, 03 May 2010 12:53:14 -0700 (PDT) Received: by 10.141.91.13 with HTTP; Mon, 3 May 2010 12:53:14 -0700 (PDT) In-Reply-To: <201004301855.12464.pedro@codesourcery.com> References: <20100430171731.5600984398@ruffy.mtv.corp.google.com> <201004301855.12464.pedro@codesourcery.com> Date: Mon, 03 May 2010 19:53:00 -0000 Message-ID: Subject: Re: [RFA] Fix gdbserver queued packet handling From: Doug Evans To: Pedro Alves Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=000e0cd13be087b32c0485b5f107 X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-05/txt/msg00045.txt.bz2 --000e0cd13be087b32c0485b5f107 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 1826 On Fri, Apr 30, 2010 at 10:55 AM, Pedro Alves wrot= e: > This seems to break the abstraction a bit. =A0GDB attempts > a reschedule on every `readchar', and avoids unnecessary calls > into the event loop by maintaining a state machine, so > everything is nicelly hidden within the serial handling code. Blech. I wish I had gone with my original thought. [btw, IWBN if one didn't have to have the state machine - e.g. if one could query whether an event was scheduled. One could register timer callbacks first, get a stable handle to use in the query, and then schedule them, for example.] I like this patch better. [Essentially all it does is the same thing gdb does, except that it doesn't bring over the complexity of timer handling, which isn't needed.] P.S. IWBN if one didn't have to continually keep bringing stuff over from gdb. Wouldn't it be nice if one could just include an event-loop.h (or some such) and use it. I'm developing the feeling that this is another instance where IWBN if gdb and gdbserver could share code. 2010-05-03 Doug Evans * event-loop.c (struct callback_event): New struct. (callback_list): New global. (append_callback_event, delete_callback_event): New functions. (process_callback): New function. (start_event_loop): Call it. * remote-utils.c (NOT_SCHEDULED): Define. (readchar_buf, readchar_bufcnt, readchar_bufp): New static globals, moved out of readchar. (readchar): Rewrite. Call reschedule before returning. (reset_readchar): New function. (remote_close): Call it. (process_remaining, reschedule): New functions. * server.h (callback_handler_func): New typedef. (append_callback_event, delete_callback_event): Declare. --000e0cd13be087b32c0485b5f107 Content-Type: text/plain; charset=US-ASCII; name="gdb-100503-gdbserver-queue-2.patch.txt" Content-Disposition: attachment; filename="gdb-100503-gdbserver-queue-2.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g8rpik9d0 Content-length: 11924 MjAxMC0wNS0wMyAgRG91ZyBFdmFucyAgPGRqZUBnb29nbGUuY29tPgoKCSog ZXZlbnQtbG9vcC5jIChzdHJ1Y3QgY2FsbGJhY2tfZXZlbnQpOiBOZXcgc3Ry dWN0LgoJKGNhbGxiYWNrX2xpc3QpOiBOZXcgZ2xvYmFsLgoJKGFwcGVuZF9j YWxsYmFja19ldmVudCwgZGVsZXRlX2NhbGxiYWNrX2V2ZW50KTogTmV3IGZ1 bmN0aW9ucy4KCShwcm9jZXNzX2NhbGxiYWNrKTogTmV3IGZ1bmN0aW9uLgoJ KHN0YXJ0X2V2ZW50X2xvb3ApOiBDYWxsIGl0LgoJKiByZW1vdGUtdXRpbHMu YyAoTk9UX1NDSEVEVUxFRCk6IERlZmluZS4KCShyZWFkY2hhcl9idWYsIHJl YWRjaGFyX2J1ZmNudCwgcmVhZGNoYXJfYnVmcCk6IE5ldyBzdGF0aWMgZ2xv YmFscywKCW1vdmVkIG91dCBvZiByZWFkY2hhci4KCShyZWFkY2hhcik6IFJl d3JpdGUuICBDYWxsIHJlc2NoZWR1bGUgYmVmb3JlIHJldHVybmluZy4KCShy ZXNldF9yZWFkY2hhcik6IE5ldyBmdW5jdGlvbi4KCShyZW1vdGVfY2xvc2Up OiBDYWxsIGl0LgoJKHByb2Nlc3NfcmVtYWluaW5nLCByZXNjaGVkdWxlKTog TmV3IGZ1bmN0aW9ucy4KCSogc2VydmVyLmggKGNhbGxiYWNrX2hhbmRsZXJf ZnVuYyk6IE5ldyB0eXBlZGVmLgoJKGFwcGVuZF9jYWxsYmFja19ldmVudCwg ZGVsZXRlX2NhbGxiYWNrX2V2ZW50KTogRGVjbGFyZS4KCkluZGV4OiBldmVu dC1sb29wLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2 cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIvZXZlbnQtbG9vcC5jLHYKcmV0cmll dmluZyByZXZpc2lvbiAxLjUKZGlmZiAtdSAtcCAtcjEuNSBldmVudC1sb29w LmMKLS0tIGV2ZW50LWxvb3AuYwkxMSBBcHIgMjAxMCAxNjozMzo1NSAtMDAw MAkxLjUKKysrIGV2ZW50LWxvb3AuYwkzIE1heSAyMDEwIDE5OjI2OjQ4IC0w MDAwCkBAIC0xNDEsNiArMTQxLDM2IEBAIHN0YXRpYyBzdHJ1Y3QKICAgfQog Z2RiX25vdGlmaWVyOwogCisvKiBDYWxsYmFja3MgYXJlIGp1c3Qgcm91dGlu ZXMgdGhhdCBhcmUgZXhlY3V0ZWQgYmVmb3JlIHdhaXRpbmcgZm9yIHRoZQor ICAgbmV4dCBldmVudC4gIEluIEdEQiB0aGlzIGlzIHN0cnVjdCBnZGJfdGlt ZXIuICBXZSBkb24ndCBuZWVkIHRpbWVycworICAgc28gcmF0aGVyIHRoYW4g Y29weSBhbGwgdGhhdCBjb21wbGV4aXR5IGluIGdkYnNlcnZlciwgd2UgcHJv dmlkZSB3aGF0CisgICB3ZSBuZWVkLCBidXQgd2UgZG8gc28gaW4gYSB3YXkg dGhhdCBpZi93aGVuIHRoZSBkYXkgY29tZXMgdGhhdCB3ZSBuZWVkCisgICB0 aGF0IGNvbXBsZXhpdHksIGl0J2xsIGJlIGVhc2llciB0byBhZGQgLSByZXBs YWNlIGNhbGxiYWNrcyB3aXRoIHRpbWVycworICAgYW5kIHVzZSBhIGRlbHRh IG9mIHplcm8gKHdoaWNoIGlzIGFsbCBnZGIgY3VycmVudGx5IHVzZXMgdGlt ZXJzIGZvciBhbnl3YXkpLgorCisgICBQUk9DIHdpbGwgYmUgZXhlY3V0ZWQg YmVmb3JlIGdkYnNlcnZlciBnb2VzIHRvIHNsZWVwIHRvIHdhaXQgZm9yIHRo ZQorICAgbmV4dCBldmVudC4gICovCisKK3N0cnVjdCBjYWxsYmFja19ldmVu dAorICB7CisgICAgaW50IGlkOworICAgIGNhbGxiYWNrX2hhbmRsZXJfZnVu YyAqcHJvYzsKKyAgICBnZGJfY2xpZW50X2RhdGEgKmRhdGE7CisgICAgc3Ry dWN0IGNhbGxiYWNrX2V2ZW50ICpuZXh0OworICB9OworCisvKiBUYWJsZSBv ZiByZWdpc3RlcmVkIGNhbGxiYWNrcy4gICovCisKK3N0YXRpYyBzdHJ1Y3QK KyAgeworICAgIHN0cnVjdCBjYWxsYmFja19ldmVudCAqZmlyc3Q7CisgICAg c3RydWN0IGNhbGxiYWNrX2V2ZW50ICpsYXN0OworCisgICAgLyogSWQgb2Yg dGhlIGxhc3QgY2FsbGJhY2sgY3JlYXRlZC4gICovCisgICAgaW50IG51bV9j YWxsYmFja3M7CisgIH0KK2NhbGxiYWNrX2xpc3Q7CisKIC8qIEluc2VydCBh biBldmVudCBvYmplY3QgaW50byB0aGUgZ2RiIGV2ZW50IHF1ZXVlLgogCiAg ICBFVkVOVF9QVFIgcG9pbnRzIHRvIHRoZSBldmVudCB0byBiZSBpbnNlcnRl ZCBpbnRvIHRoZSBxdWV1ZS4gIFRoZQpAQCAtMjIwLDYgKzI1MCw4MSBAQCBw cm9jZXNzX2V2ZW50ICh2b2lkKQogICByZXR1cm4gMDsKIH0KIAorLyogQXBw ZW5kIFBST0MgdG8gdGhlIGNhbGxiYWNrIGxpc3QuCisgICBUaGUgcmVzdWx0 IGlzIHRoZSAiaWQiIG9mIHRoZSBjYWxsYmFjayB0aGF0IGNhbiBiZSBwYXNz ZWQgYmFjayB0bworICAgZGVsZXRlX2NhbGxiYWNrX2V2ZW50LiAgKi8KKwor aW50CithcHBlbmRfY2FsbGJhY2tfZXZlbnQgKGNhbGxiYWNrX2hhbmRsZXJf ZnVuYyAqcHJvYywgZ2RiX2NsaWVudF9kYXRhIGRhdGEpCit7CisgIHN0cnVj dCBjYWxsYmFja19ldmVudCAqZXZlbnRfcHRyOworCisgIGV2ZW50X3B0ciA9 IHhtYWxsb2MgKHNpemVvZiAoKmV2ZW50X3B0cikpOworICBldmVudF9wdHIt PmlkID0gY2FsbGJhY2tfbGlzdC5udW1fY2FsbGJhY2tzKys7CisgIGV2ZW50 X3B0ci0+cHJvYyA9IHByb2M7CisgIGV2ZW50X3B0ci0+ZGF0YSA9IGRhdGE7 CisgIGV2ZW50X3B0ci0+bmV4dCA9IE5VTEw7CisgIGlmIChjYWxsYmFja19s aXN0LmZpcnN0ID09IE5VTEwpCisgICAgY2FsbGJhY2tfbGlzdC5maXJzdCA9 IGV2ZW50X3B0cjsKKyAgaWYgKGNhbGxiYWNrX2xpc3QubGFzdCAhPSBOVUxM KQorICAgIGNhbGxiYWNrX2xpc3QubGFzdC0+bmV4dCA9IGV2ZW50X3B0cjsK KyAgY2FsbGJhY2tfbGlzdC5sYXN0ID0gZXZlbnRfcHRyOworICByZXR1cm4g ZXZlbnRfcHRyLT5pZDsKK30KKworLyogRGVsZXRlIGNhbGxiYWNrIElELgor ICAgSXQgaXMgbm90IGFuIGVycm9yIGNhbGxiYWNrIElEIGRvZXNuJ3QgZXhp c3QuICAqLworCit2b2lkCitkZWxldGVfY2FsbGJhY2tfZXZlbnQgKGludCBp ZCkKK3sKKyAgc3RydWN0IGNhbGxiYWNrX2V2ZW50ICoqcDsKKworICBmb3Ig KHAgPSAmY2FsbGJhY2tfbGlzdC5maXJzdDsgKnAgIT0gTlVMTDsgcCA9ICYo KnApLT5uZXh0KQorICAgIHsKKyAgICAgIHN0cnVjdCBjYWxsYmFja19ldmVu dCAqZXZlbnRfcHRyID0gKnA7CisKKyAgICAgIGlmIChldmVudF9wdHItPmlk ID09IGlkKQorCXsKKwkgICpwID0gZXZlbnRfcHRyLT5uZXh0OworCSAgaWYg KGV2ZW50X3B0ciA9PSBjYWxsYmFja19saXN0Lmxhc3QpCisJICAgIGNhbGxi YWNrX2xpc3QubGFzdCA9IE5VTEw7CisJICBmcmVlIChldmVudF9wdHIpOwor CSAgYnJlYWs7CisJfQorICAgIH0KK30KKworLyogUnVuIHRoZSBuZXh0IGNh bGxiYWNrLgorICAgVGhlIHJlc3VsdCBpcyAxIGlmIGEgY2FsbGJhY2sgd2Fz IGNhbGxlZCBhbmQgZXZlbnQgcHJvY2Vzc2luZworICAgc2hvdWxkIGNvbnRp bnVlLCAtMSBpZiB0aGUgY2FsbGJhY2sgd2FudHMgdGhlIGV2ZW50IGxvb3Ag dG8gZXhpdCwKKyAgIGFuZCAwIGlmIHRoZXJlIGFyZSBubyBtb3JlIGNhbGxi YWNrcy4gICovCisKK3N0YXRpYyBpbnQKK3Byb2Nlc3NfY2FsbGJhY2sgKHZv aWQpCit7CisgIHN0cnVjdCBjYWxsYmFja19ldmVudCAqZXZlbnRfcHRyOwor CisgIGV2ZW50X3B0ciA9IGNhbGxiYWNrX2xpc3QuZmlyc3Q7CisgIGlmIChl dmVudF9wdHIgIT0gTlVMTCkKKyAgICB7CisgICAgICBjYWxsYmFja19oYW5k bGVyX2Z1bmMgKnByb2MgPSBldmVudF9wdHItPnByb2M7CisgICAgICBnZGJf Y2xpZW50X2RhdGEgKmRhdGEgPSBldmVudF9wdHItPmRhdGE7CisKKyAgICAg IC8qIFJlbW92ZSB0aGUgZXZlbnQgYmVmb3JlIGNhbGxpbmcgUFJPQywKKwkg bW9yZSBldmVudHMgbWF5IGdldCBhZGRlZCBieSBQUk9DLiAgKi8KKyAgICAg IGNhbGxiYWNrX2xpc3QuZmlyc3QgPSBldmVudF9wdHItPm5leHQ7CisgICAg ICBpZiAoY2FsbGJhY2tfbGlzdC5maXJzdCA9PSBOVUxMKQorCWNhbGxiYWNr X2xpc3QubGFzdCA9IE5VTEw7CisgICAgICBmcmVlICAoZXZlbnRfcHRyKTsK KyAgICAgIGlmICgoKnByb2MpIChkYXRhKSkKKwlyZXR1cm4gLTE7CisgICAg ICByZXR1cm4gMTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKIC8qIEFk ZCBhIGZpbGUgaGFuZGxlci9kZXNjcmlwdG9yIHRvIHRoZSBsaXN0IG9mIGRl c2NyaXB0b3JzIHdlIGFyZQogICAgaW50ZXJlc3RlZCBpbi4gIEZEIGlzIHRo ZSBmaWxlIGRlc2NyaXB0b3IgZm9yIHRoZSBmaWxlL3N0cmVhbSB0byBiZQog ICAgbGlzdGVuZWQgdG8uICBNQVNLIGlzIGEgY29tYmluYXRpb24gb2YgUkVB REFCTEUsIFdSSVRBQkxFLApAQCAtNTA3LDYgKzYxMiwxNiBAQCBzdGFydF9l dmVudF9sb29wICh2b2lkKQogICAgICAgaWYgKHJlcykKIAljb250aW51ZTsK IAorICAgICAgLyogUHJvY2VzcyBhbnkgcXVldWVkIGNhbGxiYWNrcyBiZWZv cmUgd2UgZ28gdG8gc2xlZXAuICAqLworICAgICAgcmVzID0gcHJvY2Vzc19j YWxsYmFjayAoKTsKKworICAgICAgLyogRGlkIHRoZSBjYWxsYmFjayB3YW50 IHRoZSBldmVudCBsb29wIHRvIHN0b3A/ICAqLworICAgICAgaWYgKHJlcyA9 PSAtMSkKKwlyZXR1cm47CisKKyAgICAgIGlmIChyZXMpCisJY29udGludWU7 CisKICAgICAgIC8qIFdhaXQgZm9yIGEgbmV3IGV2ZW50LiAgSWYgd2FpdF9m b3JfZXZlbnQgcmV0dXJucyAtMSwgd2UKIAkgc2hvdWxkIGdldCBvdXQgYmVj YXVzZSB0aGlzIG1lYW5zIHRoYXQgdGhlcmUgYXJlIG5vIGV2ZW50CiAJIHNv dXJjZXMgbGVmdC4gIFRoaXMgd2lsbCBtYWtlIHRoZSBldmVudCBsb29wIHN0 b3AsIGFuZCB0aGUKSW5kZXg6IHJlbW90ZS11dGlscy5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvZ2Ric2Vy dmVyL3JlbW90ZS11dGlscy5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjc0 CmRpZmYgLXUgLXAgLXIxLjc0IHJlbW90ZS11dGlscy5jCi0tLSByZW1vdGUt dXRpbHMuYwkyNiBBcHIgMjAxMCAxNzozODowNyAtMDAwMAkxLjc0CisrKyBy ZW1vdGUtdXRpbHMuYwkzIE1heSAyMDEwIDE5OjI2OjQ4IC0wMDAwCkBAIC04 MCw3ICs4MCwxOSBAQCB0eXBlZGVmIGludCBzb2NrbGVuX3Q7CiAjIGRlZmlu ZSBJTlZBTElEX0RFU0NSSVBUT1IgLTEKICNlbmRpZgogCisvKiBFeHRyYSB2 YWx1ZSBmb3IgcmVhZGNoYXJfY2FsbGJhY2suICAqLworZW51bSB7CisgIC8q IFRoZSBjYWxsYmFjayBpcyBjdXJyZW50bHkgbm90IHNjaGVkdWxlZC4gICov CisgIE5PVF9TQ0hFRFVMRUQgPSAtMQorfTsKKworLyogU3RhdHVzIG9mIHRo ZSByZWFkY2hhciBjYWxsYmFjay4KKyAgIEVpdGhlciBOT1RfU0NIRURVTEVE IG9yIHRoZSBjYWxsYmFjayBpZC4gICovCitzdGF0aWMgaW50IHJlYWRjaGFy X2NhbGxiYWNrID0gTk9UX1NDSEVEVUxFRDsKKwogc3RhdGljIGludCByZWFk Y2hhciAodm9pZCk7CitzdGF0aWMgdm9pZCByZXNldF9yZWFkY2hhciAodm9p ZCk7CitzdGF0aWMgdm9pZCByZXNjaGVkdWxlICh2b2lkKTsKIAogLyogQSBj YWNoZSBlbnRyeSBmb3IgYSBzdWNjZXNzZnVsbHkgbG9va2VkLXVwIHN5bWJv bC4gICovCiBzdHJ1Y3Qgc3ltX2NhY2hlCkBAIC0zNDEsNiArMzUzLDggQEAg cmVtb3RlX2Nsb3NlICh2b2lkKQogICBjbG9zZSAocmVtb3RlX2Rlc2MpOwog I2VuZGlmCiAgIHJlbW90ZV9kZXNjID0gSU5WQUxJRF9ERVNDUklQVE9SOwor CisgIHJlc2V0X3JlYWRjaGFyICgpOwogfQogCiAvKiBDb252ZXJ0IGhleCBk aWdpdCBBIHRvIGEgbnVtYmVyLiAgKi8KQEAgLTkyNiwzMyArOTQwLDg2IEBA IGluaXRpYWxpemVfYXN5bmNfaW8gKHZvaWQpCiAgIHVuYmxvY2tfYXN5bmNf aW8gKCk7CiB9CiAKKy8qIEludGVybmFsIGJ1ZmZlciB1c2VkIGJ5IHJlYWRj aGFyLgorICAgVGhlc2UgYXJlIGdsb2JhbCB0byByZWFkY2hhciBiZWNhdXNl IHJlc2NoZWR1bGVfcmVtb3RlIG5lZWRzIHRvIGJlCisgICBhYmxlIHRvIHRl bGwgd2hldGhlciB0aGUgYnVmZmVyIGlzIGVtcHR5LiAgKi8KKworc3RhdGlj IHVuc2lnbmVkIGNoYXIgcmVhZGNoYXJfYnVmW0JVRlNJWl07CitzdGF0aWMg aW50IHJlYWRjaGFyX2J1ZmNudCA9IDA7CitzdGF0aWMgdW5zaWduZWQgY2hh ciAqcmVhZGNoYXJfYnVmcDsKKwogLyogUmV0dXJucyBuZXh0IGNoYXIgZnJv bSByZW1vdGUgR0RCLiAgLTEgaWYgZXJyb3IuICAqLwogCiBzdGF0aWMgaW50 CiByZWFkY2hhciAodm9pZCkKIHsKLSAgc3RhdGljIHVuc2lnbmVkIGNoYXIg YnVmW0JVRlNJWl07Ci0gIHN0YXRpYyBpbnQgYnVmY250ID0gMDsKLSAgc3Rh dGljIHVuc2lnbmVkIGNoYXIgKmJ1ZnA7CisgIGludCBjaDsKIAotICBpZiAo YnVmY250LS0gPiAwKQotICAgIHJldHVybiAqYnVmcCsrOworICBpZiAocmVh ZGNoYXJfYnVmY250ID09IDApCisgICAgeworICAgICAgcmVhZGNoYXJfYnVm Y250ID0gcmVhZCAocmVtb3RlX2Rlc2MsIHJlYWRjaGFyX2J1Ziwgc2l6ZW9m IChyZWFkY2hhcl9idWYpKTsKIAotICBidWZjbnQgPSByZWFkIChyZW1vdGVf ZGVzYywgYnVmLCBzaXplb2YgKGJ1ZikpOworICAgICAgaWYgKHJlYWRjaGFy X2J1ZmNudCA8PSAwKQorCXsKKwkgIGlmIChyZWFkY2hhcl9idWZjbnQgPT0g MCkKKwkgICAgZnByaW50ZiAoc3RkZXJyLCAicmVhZGNoYXI6IEdvdCBFT0Zc biIpOworCSAgZWxzZQorCSAgICBwZXJyb3IgKCJyZWFkY2hhciIpOwogCi0g IGlmIChidWZjbnQgPD0gMCkKLSAgICB7Ci0gICAgICBpZiAoYnVmY250ID09 IDApCi0JZnByaW50ZiAoc3RkZXJyLCAicmVhZGNoYXI6IEdvdCBFT0ZcbiIp OwotICAgICAgZWxzZQotCXBlcnJvciAoInJlYWRjaGFyIik7CisJICByZXR1 cm4gLTE7CisJfQogCi0gICAgICByZXR1cm4gLTE7CisgICAgICByZWFkY2hh cl9idWZwID0gcmVhZGNoYXJfYnVmOworICAgIH0KKworICByZWFkY2hhcl9i dWZjbnQtLTsKKyAgY2ggPSAqcmVhZGNoYXJfYnVmcCsrOworICByZXNjaGVk dWxlICgpOworICByZXR1cm4gY2g7Cit9CisKKy8qIFJlc2V0IHRoZSByZWFk Y2hhciBzdGF0ZSBtYWNoaW5lLiAgKi8KKworc3RhdGljIHZvaWQKK3Jlc2V0 X3JlYWRjaGFyICh2b2lkKQoreworICByZWFkY2hhcl9idWZjbnQgPSAwOwor ICBpZiAocmVhZGNoYXJfY2FsbGJhY2sgIT0gTk9UX1NDSEVEVUxFRCkKKyAg ICB7CisgICAgICBkZWxldGVfY2FsbGJhY2tfZXZlbnQgKHJlYWRjaGFyX2Nh bGxiYWNrKTsKKyAgICAgIHJlYWRjaGFyX2NhbGxiYWNrID0gTk9UX1NDSEVE VUxFRDsKICAgICB9Cit9CisKKy8qIFByb2Nlc3MgcmVtYWluaW5nIGRhdGEg aW4gcmVhZGNoYXJfYnVmLiAgKi8KKworc3RhdGljIGludAorcHJvY2Vzc19y ZW1haW5pbmcgKHZvaWQgKmNvbnRleHQpCit7CisgIGludCByZXM7CisKKyAg LyogVGhpcyBpcyBhIG9uZS1zaG90IGV2ZW50LiAgKi8KKyAgcmVhZGNoYXJf Y2FsbGJhY2sgPSBOT1RfU0NIRURVTEVEOwogCi0gIGJ1ZnAgPSBidWY7Ci0g IGJ1ZmNudC0tOwotICByZXR1cm4gKmJ1ZnArKzsKKyAgaWYgKHJlYWRjaGFy X2J1ZmNudCA+IDApCisgICAgcmVzID0gaGFuZGxlX3NlcmlhbF9ldmVudCAo MCwgTlVMTCk7CisgIGVsc2UKKyAgICByZXMgPSAwOworCisgIHJldHVybiBy ZXM7Cit9CisKKy8qIElmIHRoZXJlIGlzIHN0aWxsIGRhdGEgaW4gdGhlIGJ1 ZmZlciwgcXVldWUgYW5vdGhlciBldmVudCB0byBwcm9jZXNzIGl0LAorICAg d2UgY2FuJ3Qgc2xlZXAgaW4gc2VsZWN0IHlldC4KKyAgIElmIHRoZXJlIGlz IG5vIGRhdGEgbGVmdCBpbiB0aGUgYnVmZmVyLCBkZWxldGUgYW55IHBlbmRp bmcgY2FsbGJhY2suICAqLworCitzdGF0aWMgdm9pZAorcmVzY2hlZHVsZSAo dm9pZCkKK3sKKyAgaWYgKHJlYWRjaGFyX2J1ZmNudCA+IDAgJiYgcmVhZGNo YXJfY2FsbGJhY2sgPT0gTk9UX1NDSEVEVUxFRCkKKyAgICB7CisgICAgICBy ZWFkY2hhcl9jYWxsYmFjayA9IGFwcGVuZF9jYWxsYmFja19ldmVudCAocHJv Y2Vzc19yZW1haW5pbmcsIE5VTEwpOworICAgIH0KIH0KIAogLyogUmVhZCBh IHBhY2tldCBmcm9tIHRoZSByZW1vdGUgbWFjaGluZSwgd2l0aCBlcnJvciBj aGVja2luZywKSW5kZXg6IHNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvZ2Ric2VydmVyL3NlcnZl ci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY2CmRpZmYgLXUgLXAgLXIx LjY2IHNlcnZlci5oCi0tLSBzZXJ2ZXIuaAkxMiBBcHIgMjAxMCAxMzo1MToy MiAtMDAwMAkxLjY2CisrKyBzZXJ2ZXIuaAkzIE1heSAyMDEwIDE5OjI2OjQ4 IC0wMDAwCkBAIC0zMzcsMTAgKzMzNywxNCBAQCBleHRlcm4gaW50IG5vbl9z dG9wOwogLyogRnVuY3Rpb25zIGZyb20gZXZlbnQtbG9vcC5jLiAgKi8KIHR5 cGVkZWYgdm9pZCAqZ2RiX2NsaWVudF9kYXRhOwogdHlwZWRlZiBpbnQgKGhh bmRsZXJfZnVuYykgKGludCwgZ2RiX2NsaWVudF9kYXRhKTsKK3R5cGVkZWYg aW50IChjYWxsYmFja19oYW5kbGVyX2Z1bmMpIChnZGJfY2xpZW50X2RhdGEp OwogCiBleHRlcm4gdm9pZCBkZWxldGVfZmlsZV9oYW5kbGVyIChpbnQgZmQp OwogZXh0ZXJuIHZvaWQgYWRkX2ZpbGVfaGFuZGxlciAoaW50IGZkLCBoYW5k bGVyX2Z1bmMgKnByb2MsCiAJCQkgICAgICBnZGJfY2xpZW50X2RhdGEgY2xp ZW50X2RhdGEpOworZXh0ZXJuIGludCBhcHBlbmRfY2FsbGJhY2tfZXZlbnQg KGNhbGxiYWNrX2hhbmRsZXJfZnVuYyAqcHJvYywKKwkJCQkgICBnZGJfY2xp ZW50X2RhdGEgY2xpZW50X2RhdGEpOworZXh0ZXJuIHZvaWQgZGVsZXRlX2Nh bGxiYWNrX2V2ZW50IChpbnQgaWQpOwogCiBleHRlcm4gdm9pZCBzdGFydF9l dmVudF9sb29wICh2b2lkKTsKIAo= --000e0cd13be087b32c0485b5f107--