From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Dmitry Antipov Newsgroups: gmane.emacs.devel Subject: Buffer-/frame-local variables [Was: Re: Make buffer- and frame-locals a misc object] Date: Thu, 16 Aug 2012 08:10:53 +0400 Message-ID: <502C72CD.2050908@yandex.ru> References: <502B7EFB.7030300@yandex.ru> <502BB333.70306@yandex.ru> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------040107010105060402060309" X-Trace: ger.gmane.org 1345090113 1241 80.91.229.3 (16 Aug 2012 04:08:33 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 16 Aug 2012 04:08:33 +0000 (UTC) Cc: Emacs development discussions To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Aug 16 06:08:33 2012 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1T1rNn-00035w-Vy for ged-emacs-devel@m.gmane.org; Thu, 16 Aug 2012 06:08:32 +0200 Original-Received: from localhost ([::1]:51712 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T1rNm-000885-T6 for ged-emacs-devel@m.gmane.org; Thu, 16 Aug 2012 00:08:30 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:42067) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T1rNi-00086e-Um for emacs-devel@gnu.org; Thu, 16 Aug 2012 00:08:28 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T1rNh-0007rO-6X for emacs-devel@gnu.org; Thu, 16 Aug 2012 00:08:26 -0400 Original-Received: from forward18.mail.yandex.net ([95.108.253.143]:43112) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T1rNg-0007rC-EG for emacs-devel@gnu.org; Thu, 16 Aug 2012 00:08:24 -0400 Original-Received: from smtp19.mail.yandex.net (smtp19.mail.yandex.net [95.108.252.19]) by forward18.mail.yandex.net (Yandex) with ESMTP id CA7D31782BD8; Thu, 16 Aug 2012 08:08:22 +0400 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1345090102; bh=77/+ZrO2d1TLgTf1N7qDRcr8SQuNsEftMBUW5MJ5sQg=; h=Message-ID:Date:From:MIME-Version:To:CC:Subject:References: In-Reply-To:Content-Type; b=Z7lmVUM0HaYGyvveH6xdr5Unc/h2L29j6CYYznlYGjEQ8d+SOdyQbr8thy0MSUFEM ps3FRxSERylDZQ9nR3gS43Lw2FPdNH9Rq+eoXIY10g4iQsXySZ6XlahQh2lv4iTFmu vb26S7jg/IcXZZ+D6awyRNWOsUIOfrOmLBb3mQlM= Original-Received: from smtp19.mail.yandex.net (localhost [127.0.0.1]) by smtp19.mail.yandex.net (Yandex) with ESMTP id A4240BE0839; Thu, 16 Aug 2012 08:08:22 +0400 (MSK) Original-Received: from unknown (unknown [37.139.84.55]) by smtp19.mail.yandex.net (nwsmtp/Yandex) with ESMTP id 8L1q5Og5-8M1qhvLl; Thu, 16 Aug 2012 08:08:22 +0400 X-Yandex-Rcpt-Suid: monnier@IRO.UMontreal.CA X-Yandex-Rcpt-Suid: emacs-devel@gnu.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1345090102; bh=77/+ZrO2d1TLgTf1N7qDRcr8SQuNsEftMBUW5MJ5sQg=; h=Message-ID:Date:From:User-Agent:MIME-Version:To:CC:Subject: References:In-Reply-To:Content-Type; b=VFG0XSYTHqvcHVUzUdvTJWWNzcPXBmQ5UnFT/AstGZ2/fRBP5DL0PYO6IDU9tMEDb Rp4ZXSY6UHRlfkJvWn25PsW2+C9XPGovvfnIetNHVfBDXxtCLwr2XPqMPoq9mTgW/g wu3WfCPDe4qWXXTclm1rdDFqdRnctMytqy2n7a2k= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20120713 Thunderbird/14.0 In-Reply-To: X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 95.108.253.143 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:152581 This is a multi-part message in MIME format. --------------040107010105060402060309 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 08/15/2012 08:02 PM, Stefan Monnier wrote: >> For 1), my previous (and inglorious) attempt to hack around >> save-excursion shows that mixing explicitly allocated/freed objects >> with GC-managed objects is poor idea, so getting rid of xmalloc/xfree >> makes the things more predictable. > > Fear of the unknown is not a good motivation for a change ;-) > Have you found out what was the problem? The problem was that the marker embedded into struct Lisp_Excursion can be linked to buffer's undo list; when struct Lisp_Excursion gets xfree'd, the marker pointer from undo list becomes dangling. > But in any case the current use of xmalloc/xfree for Lisp_Buffer_Local_Value > doesn't show any sign of suffering from a similar problem. OK >> For 2), the usual purpose is to prepare the hooks for the write barrier. > > Why have get_blv_value, since it's not needed for a write barrier? > The set_blv_* are OK, OTOH. OK. So please consider attached patch for the trunk. > I do wonder, tho: do we need those write-barriers in the object-creation > function (e.g. make_buffer_local_value)? In general, no, since all just allocated objects are new by definition, and write barrier action is raised only if the pointer to new object is stored into an old one. So, the write barrier is installed but never raised; I remember about this, and, of course, such a cases will be optimized away. Dmitry --------------040107010105060402060309 Content-Type: text/plain; charset=UTF-8; name="blv.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="blv.patch" PT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9kYXRhLmMnCi0tLSBzcmMvZGF0YS5jCTIwMTItMDgt MTQgMTc6MTA6MzggKzAwMDAKKysrIHNyYy9kYXRhLmMJMjAxMi0wOC0xNiAwMzo0Nzo0NiAr MDAwMApAQCAtNTQzLDcgKzU0Myw3IEBACiAJZWxzZQogCSAgewogCSAgICBzd2FwX2luX3N5 bXZhbF9mb3J3YXJkaW5nIChzeW0sIGJsdik7Ci0JICAgIHZhbGNvbnRlbnRzID0gQkxWX1ZB TFVFIChibHYpOworCSAgICB2YWxjb250ZW50cyA9IFhDRFIgKGJsdi0+dmFsY2VsbCk7CiAJ ICB9CiAJYnJlYWs7CiAgICAgICB9CkBAIC05NjQsMTYgKzk2NCwxNiBAQAogCiAgIC8qIFVu bG9hZCB0aGUgcHJldmlvdXNseSBsb2FkZWQgYmluZGluZy4gICovCiAgIGlmIChibHYtPmZ3 ZCkKLSAgICBTRVRfQkxWX1ZBTFVFIChibHYsIGRvX3N5bXZhbF9mb3J3YXJkaW5nIChibHYt PmZ3ZCkpOworICAgIHNldF9ibHZfdmFsdWUgKGJsdiwgZG9fc3ltdmFsX2ZvcndhcmRpbmcg KGJsdi0+ZndkKSk7CiAKICAgLyogU2VsZWN0IHRoZSBnbG9iYWwgYmluZGluZyBpbiB0aGUg c3ltYm9sLiAgKi8KLSAgYmx2LT52YWxjZWxsID0gYmx2LT5kZWZjZWxsOworICBzZXRfYmx2 X3ZhbGNlbGwgKGJsdiwgYmx2LT5kZWZjZWxsKTsKICAgaWYgKGJsdi0+ZndkKQogICAgIHN0 b3JlX3N5bXZhbF9mb3J3YXJkaW5nIChibHYtPmZ3ZCwgWENEUiAoYmx2LT5kZWZjZWxsKSwg TlVMTCk7CiAKICAgLyogSW5kaWNhdGUgdGhhdCB0aGUgZ2xvYmFsIGJpbmRpbmcgaXMgc2V0 IHVwIG5vdy4gICovCi0gIGJsdi0+d2hlcmUgPSBRbmlsOwotICBTRVRfQkxWX0ZPVU5EIChi bHYsIDApOworICBzZXRfYmx2X3doZXJlIChibHYsIFFuaWwpOworICBzZXRfYmx2X2ZvdW5k IChibHYsIDApOwogfQogCiAvKiBTZXQgdXAgdGhlIGJ1ZmZlci1sb2NhbCBzeW1ib2wgU1lN Qk9MIGZvciB2YWxpZGl0eSBpbiB0aGUgY3VycmVudCBidWZmZXIuCkBAIC0xMDAxLDcgKzEw MDEsNyBAQAogICAgICAgLyogVW5sb2FkIHRoZSBwcmV2aW91c2x5IGxvYWRlZCBiaW5kaW5n LiAgKi8KICAgICAgIHRlbTEgPSBibHYtPnZhbGNlbGw7CiAgICAgICBpZiAoYmx2LT5md2Qp Ci0JU0VUX0JMVl9WQUxVRSAoYmx2LCBkb19zeW12YWxfZm9yd2FyZGluZyAoYmx2LT5md2Qp KTsKKwlzZXRfYmx2X3ZhbHVlIChibHYsIGRvX3N5bXZhbF9mb3J3YXJkaW5nIChibHYtPmZ3 ZCkpOwogICAgICAgLyogQ2hvb3NlIHRoZSBuZXcgYmluZGluZy4gICovCiAgICAgICB7CiAJ TGlzcF9PYmplY3QgdmFyOwpAQCAtMTAwOSw3ICsxMDA5LDcgQEAKIAlpZiAoYmx2LT5mcmFt ZV9sb2NhbCkKIAkgIHsKIAkgICAgdGVtMSA9IGFzc3Ffbm9fcXVpdCAodmFyLCBYRlJBTUUg KHNlbGVjdGVkX2ZyYW1lKS0+cGFyYW1fYWxpc3QpOwotCSAgICBibHYtPndoZXJlID0gc2Vs ZWN0ZWRfZnJhbWU7CisJICAgIHNldF9ibHZfd2hlcmUgKGJsdiwgc2VsZWN0ZWRfZnJhbWUp OwogCSAgfQogCWVsc2UKIAkgIHsKQEAgLTEwMjEsOSArMTAyMSw5IEBACiAJdGVtMSA9IGJs di0+ZGVmY2VsbDsKIAogICAgICAgLyogTG9hZCB0aGUgbmV3IGJpbmRpbmcuICAqLwotICAg ICAgYmx2LT52YWxjZWxsID0gdGVtMTsKKyAgICAgIHNldF9ibHZfdmFsY2VsbCAoYmx2LCB0 ZW0xKTsKICAgICAgIGlmIChibHYtPmZ3ZCkKLQlzdG9yZV9zeW12YWxfZm9yd2FyZGluZyAo Ymx2LT5md2QsIEJMVl9WQUxVRSAoYmx2KSwgTlVMTCk7CisJc3RvcmVfc3ltdmFsX2Zvcndh cmRpbmcgKGJsdi0+ZndkLCBYQ0RSIChibHYtPnZhbGNlbGwpLCBOVUxMKTsKICAgICB9CiB9 CiAMCkBAIC0xMDUwLDcgKzEwNTAsNyBAQAogICAgICAgewogCXN0cnVjdCBMaXNwX0J1ZmZl cl9Mb2NhbF9WYWx1ZSAqYmx2ID0gU1lNQk9MX0JMViAoc3ltKTsKIAlzd2FwX2luX3N5bXZh bF9mb3J3YXJkaW5nIChzeW0sIGJsdik7Ci0JcmV0dXJuIGJsdi0+ZndkID8gZG9fc3ltdmFs X2ZvcndhcmRpbmcgKGJsdi0+ZndkKSA6IEJMVl9WQUxVRSAoYmx2KTsKKwlyZXR1cm4gYmx2 LT5md2QgPyBkb19zeW12YWxfZm9yd2FyZGluZyAoYmx2LT5md2QpIDogWENEUiAoYmx2LT52 YWxjZWxsKTsKICAgICAgIH0KICAgICAgIC8qIEZBTExUSFJPVUdIICovCiAgICAgY2FzZSBT WU1CT0xfRk9SV0FSREVEOgpAQCAtMTE3NSw3ICsxMTc1LDcgQEAKIAogCSAgICAvKiBXcml0 ZSBvdXQgYHJlYWx2YWx1ZScgdG8gdGhlIG9sZCBsb2FkZWQgYmluZGluZy4gICovCiAJICAg IGlmIChibHYtPmZ3ZCkKLQkgICAgICBTRVRfQkxWX1ZBTFVFIChibHYsIGRvX3N5bXZhbF9m b3J3YXJkaW5nIChibHYtPmZ3ZCkpOworCSAgICAgIHNldF9ibHZfdmFsdWUgKGJsdiwgZG9f c3ltdmFsX2ZvcndhcmRpbmcgKGJsdi0+ZndkKSk7CiAKIAkgICAgLyogRmluZCB0aGUgbmV3 IGJpbmRpbmcuICAqLwogCSAgICBYU0VUU1lNQk9MIChzeW1ib2wsIHN5bSk7IC8qIE1heSBo YXZlIGNoYW5nZWQgdmlhIGFsaWFzaW5nLiAgKi8KQEAgLTExODMsOCArMTE4Myw4IEBACiAJ CQkgIChibHYtPmZyYW1lX2xvY2FsCiAJCQkgICA/IFhGUkFNRSAod2hlcmUpLT5wYXJhbV9h bGlzdAogCQkJICAgOiBCVkFSIChYQlVGRkVSICh3aGVyZSksIGxvY2FsX3Zhcl9hbGlzdCkp KTsKLQkgICAgYmx2LT53aGVyZSA9IHdoZXJlOwotCSAgICBibHYtPmZvdW5kID0gMTsKKwkg ICAgc2V0X2Jsdl93aGVyZSAoYmx2LCB3aGVyZSk7CisJICAgIHNldF9ibHZfZm91bmQgKGJs diwgMSk7CiAKIAkgICAgaWYgKE5JTFAgKHRlbTEpKQogCSAgICAgIHsKQEAgLTExOTksNyAr MTE5OSw3IEBACiAJCWlmIChiaW5kZmxhZyB8fCAhYmx2LT5sb2NhbF9pZl9zZXQKIAkJICAg IHx8IGxldF9zaGFkb3dzX2J1ZmZlcl9iaW5kaW5nX3AgKHN5bSkpCiAJCSAgewotCQkgICAg Ymx2LT5mb3VuZCA9IDA7CisJCSAgICBzZXRfYmx2X2ZvdW5kIChibHYsIDApOwogCQkgICAg dGVtMSA9IGJsdi0+ZGVmY2VsbDsKIAkJICB9CiAJCS8qIElmIGl0J3MgYSBsb2NhbF9pZl9z ZXQsIGJlaW5nIHNldCBub3QgYm91bmQsCkBAIC0xMjE5LDExICsxMjE5LDExIEBACiAJICAg ICAgfQogCiAJICAgIC8qIFJlY29yZCB3aGljaCBiaW5kaW5nIGlzIG5vdyBsb2FkZWQuICAq LwotCSAgICBibHYtPnZhbGNlbGwgPSB0ZW0xOworCSAgICBzZXRfYmx2X3ZhbGNlbGwgKGJs diwgdGVtMSk7CiAJICB9CiAKIAkvKiBTdG9yZSB0aGUgbmV3IHZhbHVlIGluIHRoZSBjb25z IGNlbGwuICAqLwotCVNFVF9CTFZfVkFMVUUgKGJsdiwgbmV3dmFsKTsKKwlzZXRfYmx2X3Zh bHVlIChibHYsIG5ld3ZhbCk7CiAKIAlpZiAoYmx2LT5md2QpCiAJICB7CkBAIC0xNDc5LDEy ICsxNDc5LDEyIEBACiAgIGVhc3NlcnQgKCEoZm9yd2FyZGVkICYmIEJVRkZFUl9PQkpGV0RQ ICh2YWxjb250ZW50cy5md2QpKSk7CiAgIGVhc3NlcnQgKCEoZm9yd2FyZGVkICYmIEtCT0FS RF9PQkpGV0RQICh2YWxjb250ZW50cy5md2QpKSk7CiAgIGJsdi0+ZndkID0gZm9yd2FyZGVk ID8gdmFsY29udGVudHMuZndkIDogTlVMTDsKLSAgYmx2LT53aGVyZSA9IFFuaWw7CisgIHNl dF9ibHZfd2hlcmUgKGJsdiwgUW5pbCk7CiAgIGJsdi0+ZnJhbWVfbG9jYWwgPSAwOwogICBi bHYtPmxvY2FsX2lmX3NldCA9IDA7Ci0gIGJsdi0+ZGVmY2VsbCA9IHRlbTsKLSAgYmx2LT52 YWxjZWxsID0gdGVtOwotICBTRVRfQkxWX0ZPVU5EIChibHYsIDApOworICBzZXRfYmx2X2Rl ZmNlbGwgKGJsdiwgdGVtKTsKKyAgc2V0X2Jsdl92YWxjZWxsIChibHYsIHRlbSk7CisgIHNl dF9ibHZfZm91bmQgKGJsdiwgMCk7CiAgIHJldHVybiBibHY7CiB9CiAKQEAgLTE2NjAsMTAg KzE2NjAsOCBAQAogICAgICAgLyogTWFrZSBzdXJlIHN5bWJvbCBkb2VzIG5vdCB0aGluayBp dCBpcyBzZXQgdXAgZm9yIHRoaXMgYnVmZmVyOwogCSBmb3JjZSBpdCB0byBsb29rIG9uY2Ug YWdhaW4gZm9yIHRoaXMgYnVmZmVyJ3MgdmFsdWUuICAqLwogICAgICAgaWYgKGN1cnJlbnRf YnVmZmVyID09IFhCVUZGRVIgKGJsdi0+d2hlcmUpKQotCWJsdi0+d2hlcmUgPSBRbmlsOwot ICAgICAgLyogYmx2LT52YWxjZWxsID0gYmx2LT5kZWZjZWxsOwotICAgICAgICogU0VUX0JM Vl9GT1VORCAoYmx2LCAwKTsgKi8KLSAgICAgIGJsdi0+Zm91bmQgPSAwOworCXNldF9ibHZf d2hlcmUgKGJsdiwgUW5pbCk7CisgICAgICBzZXRfYmx2X2ZvdW5kIChibHYsIDApOwogICAg IH0KIAogICAvKiBJZiB0aGUgc3ltYm9sIGZvcndhcmRzIGludG8gYSBDIHZhcmlhYmxlLCB0 aGVuIGxvYWQgdGhlIGJpbmRpbmcKQEAgLTE3MzMsMTAgKzE3MzEsOCBAQAogICAgIExpc3Bf T2JqZWN0IGJ1ZjsgWFNFVEJVRkZFUiAoYnVmLCBjdXJyZW50X2J1ZmZlcik7CiAgICAgaWYg KEVRIChidWYsIGJsdi0+d2hlcmUpKQogICAgICAgewotCWJsdi0+d2hlcmUgPSBRbmlsOwot CS8qIGJsdi0+dmFsY2VsbCA9IGJsdi0+ZGVmY2VsbDsKLQkgKiBTRVRfQkxWX0ZPVU5EIChi bHYsIDApOyAqLwotCWJsdi0+Zm91bmQgPSAwOworCXNldF9ibHZfd2hlcmUgKGJsdiwgUW5p bCk7CisJc2V0X2Jsdl9mb3VuZCAoYmx2LCAwKTsKIAlmaW5kX3N5bWJvbF92YWx1ZSAodmFy aWFibGUpOwogICAgICAgfQogICB9CkBAIC0xODU3LDExICsxODUzLDExIEBACiAJICAgIGlm IChFUSAodmFyaWFibGUsIFhDQVIgKGVsdCkpKQogCSAgICAgIHsKIAkJZWFzc2VydCAoIWJs di0+ZnJhbWVfbG9jYWwpOwotCQllYXNzZXJ0IChCTFZfRk9VTkQgKGJsdikgfHwgIUVRIChi bHYtPndoZXJlLCB0bXApKTsKKwkJZWFzc2VydCAoZ2V0X2Jsdl9mb3VuZCAoYmx2KSB8fCAh RVEgKGJsdi0+d2hlcmUsIHRtcCkpOwogCQlyZXR1cm4gUXQ7CiAJICAgICAgfQogCSAgfQot CWVhc3NlcnQgKCFCTFZfRk9VTkQgKGJsdikgfHwgIUVRIChibHYtPndoZXJlLCB0bXApKTsK KwllYXNzZXJ0ICghZ2V0X2Jsdl9mb3VuZCAoYmx2KSB8fCAhRVEgKGJsdi0+d2hlcmUsIHRt cCkpOwogCXJldHVybiBRbmlsOwogICAgICAgfQogICAgIGNhc2UgU1lNQk9MX0ZPUldBUkRF RDoKQEAgLTE5NTEsNyArMTk0Nyw3IEBACiAgICAgICBpZiAoIU5JTFAgKEZsb2NhbF92YXJp YWJsZV9wICh2YXJpYWJsZSwgUW5pbCkpKQogCXJldHVybiBGY3VycmVudF9idWZmZXIgKCk7 CiAgICAgICBlbHNlIGlmIChzeW0tPnJlZGlyZWN0ID09IFNZTUJPTF9MT0NBTElaRUQKLQkg ICAgICAgJiYgQkxWX0ZPVU5EIChTWU1CT0xfQkxWIChzeW0pKSkKKwkgICAgICAgJiYgZ2V0 X2Jsdl9mb3VuZCAoU1lNQk9MX0JMViAoc3ltKSkpCiAJcmV0dXJuIFNZTUJPTF9CTFYgKHN5 bSktPndoZXJlOwogICAgICAgZWxzZQogCXJldHVybiBRbmlsOwoKPT09IG1vZGlmaWVkIGZp bGUgJ3NyYy9ldmFsLmMnCi0tLSBzcmMvZXZhbC5jCTIwMTItMDgtMTYgMDE6MTg6MDcgKzAw MDAKKysrIHNyYy9ldmFsLmMJMjAxMi0wOC0xNiAwMzo0NTo0NyArMDAwMApAQCAtMzE2OSwx MiArMzE2OSwxMiBAQAogCSAgICBpZiAoIU5JTFAgKEZsb2NhbF92YXJpYWJsZV9wIChzeW1i b2wsIFFuaWwpKSkKIAkgICAgICB7CiAJCWVhc3NlcnQgKHN5bS0+cmVkaXJlY3QgIT0gU1lN Qk9MX0xPQ0FMSVpFRAotCQkJIHx8IChCTFZfRk9VTkQgKFNZTUJPTF9CTFYgKHN5bSkpCisJ CQkgfHwgKGdldF9ibHZfZm91bmQgKFNZTUJPTF9CTFYgKHN5bSkpCiAJCQkgICAgICYmIEVR IChjdXJfYnVmLCBTWU1CT0xfQkxWIChzeW0pLT53aGVyZSkpKTsKIAkJd2hlcmUgPSBjdXJf YnVmOwogCSAgICAgIH0KIAkgICAgZWxzZSBpZiAoc3ltLT5yZWRpcmVjdCA9PSBTWU1CT0xf TE9DQUxJWkVECi0JCSAgICAgJiYgQkxWX0ZPVU5EIChTWU1CT0xfQkxWIChzeW0pKSkKKwkJ ICAgICAmJiBnZXRfYmx2X2ZvdW5kIChTWU1CT0xfQkxWIChzeW0pKSkKIAkgICAgICB3aGVy ZSA9IFNZTUJPTF9CTFYgKHN5bSktPndoZXJlOwogCSAgICBlbHNlCiAJICAgICAgd2hlcmUg PSBRbmlsOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9mcmFtZS5jJwotLS0gc3JjL2ZyYW1l LmMJMjAxMi0wOC0xNCAwODo0NDoyNCArMDAwMAorKysgc3JjL2ZyYW1lLmMJMjAxMi0wOC0x NiAwMzo0NTo0NyArMDAwMApAQCAtMjA5Niw3ICsyMDk2LDcgQEAKIAljYXNlIFNZTUJPTF9Q TEFJTlZBTDogY2FzZSBTWU1CT0xfRk9SV0FSREVEOiBicmVhazsKIAljYXNlIFNZTUJPTF9M T0NBTElaRUQ6CiAJICB7IHN0cnVjdCBMaXNwX0J1ZmZlcl9Mb2NhbF9WYWx1ZSAqYmx2ID0g c3ltLT52YWwuYmx2OwotCSAgICBpZiAoYmx2LT5mcmFtZV9sb2NhbCAmJiBCTFZfRk9VTkQg KGJsdikgJiYgWEZSQU1FIChibHYtPndoZXJlKSA9PSBmKQorCSAgICBpZiAoYmx2LT5mcmFt ZV9sb2NhbCAmJiBnZXRfYmx2X2ZvdW5kIChibHYpICYmIFhGUkFNRSAoYmx2LT53aGVyZSkg PT0gZikKIAkgICAgICBzd2FwX2luX2dsb2JhbF9iaW5kaW5nIChzeW0pOwogCSAgICBicmVh azsKIAkgIH0KCj09PSBtb2RpZmllZCBmaWxlICdzcmMvbGlzcC5oJwotLS0gc3JjL2xpc3Au aAkyMDEyLTA4LTE2IDAzOjEzOjQ0ICswMDAwCisrKyBzcmMvbGlzcC5oCTIwMTItMDgtMTYg MDM6NDg6MjMgKzAwMDAKQEAgLTE0NzIsMTQgKzE0NzIsNiBAQAogICAgIExpc3BfT2JqZWN0 IHZhbGNlbGw7CiAgIH07CiAKLSNkZWZpbmUgQkxWX0ZPVU5EKGJsdikgXAotICAoZWFzc2Vy dCAoKGJsdiktPmZvdW5kID09ICFFUSAoKGJsdiktPmRlZmNlbGwsIChibHYpLT52YWxjZWxs KSksIChibHYpLT5mb3VuZCkKLSNkZWZpbmUgU0VUX0JMVl9GT1VORChibHYsIHYpIFwKLSAg KGVhc3NlcnQgKCh2KSA9PSAhRVEgKChibHYpLT5kZWZjZWxsLCAoYmx2KS0+dmFsY2VsbCkp LCAoYmx2KS0+Zm91bmQgPSAodikpCi0KLSNkZWZpbmUgQkxWX1ZBTFVFKGJsdikgKFhDRFIg KChibHYpLT52YWxjZWxsKSkKLSNkZWZpbmUgU0VUX0JMVl9WQUxVRShibHYsIHYpIChYU0VU Q0RSICgoYmx2KS0+dmFsY2VsbCwgdikpCi0KIC8qIExpa2UgTGlzcF9PYmpmd2QgZXhjZXB0 IHRoYXQgdmFsdWUgbGl2ZXMgaW4gYSBzbG90IGluIHRoZQogICAgY3VycmVudCBrYm9hcmQu ICAqLwogc3RydWN0IExpc3BfS2JvYXJkX09iamZ3ZApAQCAtMjQxMiw2ICsyNDA0LDQ2IEBA CiAgIFhTWU1CT0wgKHN5bSktPm5leHQgPSBuZXh0OwogfQogCisvKiBCdWZmZXItbG9jYWwg KGFsc28gZnJhbWUtbG9jYWwpIHZhcmlhYmxlIGFjY2VzcyBmdW5jdGlvbnMuICAqLworCitM SVNQX0lOTElORSBpbnQKK2dldF9ibHZfZm91bmQgKHN0cnVjdCBMaXNwX0J1ZmZlcl9Mb2Nh bF9WYWx1ZSAqYmx2KQoreworICBlYXNzZXJ0IChibHYtPmZvdW5kID09ICFFUSAoYmx2LT5k ZWZjZWxsLCBibHYtPnZhbGNlbGwpKTsKKyAgcmV0dXJuIGJsdi0+Zm91bmQ7Cit9CisKK0xJ U1BfSU5MSU5FIHZvaWQKK3NldF9ibHZfZm91bmQgKHN0cnVjdCBMaXNwX0J1ZmZlcl9Mb2Nh bF9WYWx1ZSAqYmx2LCBpbnQgZm91bmQpCit7CisgIGVhc3NlcnQgKGZvdW5kID09ICFFUSAo Ymx2LT5kZWZjZWxsLCBibHYtPnZhbGNlbGwpKTsKKyAgYmx2LT5mb3VuZCA9IGZvdW5kOwor fQorCitMSVNQX0lOTElORSB2b2lkCitzZXRfYmx2X3ZhbHVlIChzdHJ1Y3QgTGlzcF9CdWZm ZXJfTG9jYWxfVmFsdWUgKmJsdiwgTGlzcF9PYmplY3QgdmFsKQoreworICBYU0VUQ0RSIChi bHYtPnZhbGNlbGwsIHZhbCk7Cit9CisKK0xJU1BfSU5MSU5FIHZvaWQKK3NldF9ibHZfd2hl cmUgKHN0cnVjdCBMaXNwX0J1ZmZlcl9Mb2NhbF9WYWx1ZSAqYmx2LCBMaXNwX09iamVjdCB2 YWwpCit7CisgIGJsdi0+d2hlcmUgPSB2YWw7Cit9CisKK0xJU1BfSU5MSU5FIHZvaWQKK3Nl dF9ibHZfZGVmY2VsbCAoc3RydWN0IExpc3BfQnVmZmVyX0xvY2FsX1ZhbHVlICpibHYsIExp c3BfT2JqZWN0IHZhbCkKK3sKKyAgYmx2LT5kZWZjZWxsID0gdmFsOworfQorCitMSVNQX0lO TElORSB2b2lkCitzZXRfYmx2X3ZhbGNlbGwgKHN0cnVjdCBMaXNwX0J1ZmZlcl9Mb2NhbF9W YWx1ZSAqYmx2LCBMaXNwX09iamVjdCB2YWwpCit7CisgIGJsdi0+dmFsY2VsbCA9IHZhbDsK K30KKwogLyogU2V0IG92ZXJsYXkncyBwcm9wZXJ0eSBsaXN0LiAgKi8KIAogTElTUF9JTkxJ TkUgdm9pZAoK --------------040107010105060402060309--