Newsgroups: php.internals,php.pecl.dev Path: news.php.net Xref: news.php.net php.internals:46999 php.pecl.dev:7032 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 55938 invoked from network); 19 Feb 2010 15:54:55 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 19 Feb 2010 15:54:55 -0000 Authentication-Results: pb1.pair.com smtp.mail=chris_se@gmx.net; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=chris_se@gmx.net; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmx.net designates 213.165.64.20 as permitted sender) X-PHP-List-Original-Sender: chris_se@gmx.net X-Host-Fingerprint: 213.165.64.20 mail.gmx.net Received: from [213.165.64.20] ([213.165.64.20:54696] helo=mail.gmx.net) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 76/E0-57104-D44BE7B4 for ; Fri, 19 Feb 2010 10:54:54 -0500 Received: (qmail invoked by alias); 19 Feb 2010 15:54:49 -0000 Received: from p54A150A9.dip.t-dialin.net (EHLO chris-se.dyndns.org) [84.161.80.169] by mail.gmx.net (mp062) with SMTP; 19 Feb 2010 16:54:49 +0100 X-Authenticated: #186999 X-Provags-ID: V01U2FsdGVkX1+k530VfDukmw9JBX8MDfi/ofscnlxrf3L4IocO1Z VQNJvnPBfyQAZm Received: from [192.168.0.175] (HSI-KBW-091-089-022-117.hsi2.kabelbw.de [91.89.22.117]) by chris-se.dyndns.org (Postfix) with ESMTP id E6F1C32BC; Fri, 19 Feb 2010 16:54:47 +0100 (CET) Message-ID: <4B7EB41D.9060207@gmx.net> Date: Fri, 19 Feb 2010 16:54:05 +0100 User-Agent: Thunderbird 2.0.0.21 (X11/20090302) MIME-Version: 1.0 To: php-dev List CC: pecl-dev@lists.php.net X-Enigmail-Version: 0.96.0 Content-Type: multipart/mixed; boundary="------------080605070005040300000902" X-Y-GMX-Trusted: 0 X-FuHaFi: 0.56000000000000005,0.45000000000000001,0.46000000000000002,0.46000000000000002 Subject: Execution point of session save handler on shutdown From: chris_se@gmx.net (Christian Seiler) --------------080605070005040300000902 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hello, [CC to pecl-dev since this is APC-related.] I have been investigating a problem occuring when using APC in combination with userspace session save handlers. This has been reported multiple times both in the APC and PHP bugtrackers, bugs related to this issue include (but are most likely not limited to): http://bugs.php.net/bug.php?id=48787 http://bugs.php.net/bug.php?id=48686 http://pecl.php.net/bugs/bug.php?id=16721 http://pecl.php.net/bugs/bug.php?id=16745 Using a debugger I have found the source of the problem. In my eyes, this is a design problem in PHP's session extension. Rationale: Currently, the session module calls php_session_flush() in its RSHUTDOWN function. This makes sure that the session handler is always called at the very end of execution. However, APC uses its RSHUTDOWN function to remove all class entries from the class table, since they are only shallow copies of memory structures of its cache and the Zend engine should not destroy the class entries by itself. The problem now occurs when the session save handler uses non-internal classes in some way. Since APC, as a dynamic extension, is always loaded AFTER the session module (always a static extension), and the module de-initialization is in reverse order, APC will unload all internal classes *before* the session save handler is executed. So when it is finally the turn of the the session save handler, the classes will no longer be present in the class table, causing the problems described above. Note that APC is not the only extension for which there is a problem with regards to de-initialization. The Spidermonkey extension destroys the current Javascript execution context in the RSHUTDOWN function, so if should any save handler use the Spidermonkey extension, it will not work. In theory, even the date extension could cause minor problems (since the default timezone is reset in RSHUTDOWN), but it gets away since it is always loaded *before* session and thus de-inititialized afterwards. I consider this to be a design problem in PHP's session extension. It tries to use the PHP engine to execute PHP code (the custom session save handler, possibly also the serialization handlers of objects etc.) during a phase where at least some other extension that may be used in that code are already de-initialized. The only reason why it got unnoticed so long is that the RSHUTDOWN code of most - but not all - extensions doesn't really have any really nasty side-effects on its use. It would not surprise me at all, however, if there were memory leaks and other strange this occurring due to this problem. My immediate fix for this problem is to make php_request_shutdown() execute the session save handler just after the userspace shutdown functions but before the RSHUTDOWN functions of the other modules. I have attached short patches to this mail for PHP 5.2, 5.3 and 6.0 that accomplish this. It's not very elegant but it is the least-invasive fix I could come up with. Not existing tests are broken in either of the three branches. Unfortunately, I was not able to create a unit test for this using core PHP alone, since all of the core extensions hide the problem. I wanted to get some feedback first. If nobody objects, however, I'll apply these patches to PHP 5.3 and PHP 6 tomorrow. As for PHP 5.2: I was extremely busy the last two months so I didn't really follow the list. Is it okay if I apply it? I do think this patch should go into the last release of PHP 5.2 (which will be used by quite a few people for a while) since this bug prevents people from using a custom session save handler in combination with APC. On a side note: For PHP6 we may think of adding an additional hook for modules that is executed at the very beginning of the shutdown phase for precisely this purpose. Regards, Christian --------------080605070005040300000902 Content-Type: text/plain; name="session-save-handler-execution.php52.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="session-save-handler-execution.php52.patch" SW5kZXg6IGV4dC9zZXNzaW9uL3Nlc3Npb24uYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBleHQvc2Vz c2lvbi9zZXNzaW9uLmMJKHJldmlzaW9uIDI5NTI1MSkKKysrIGV4dC9zZXNzaW9uL3Nlc3Np b24uYwkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogCiAjaW5jbHVkZSAicGhw X2luaS5oIgogI2luY2x1ZGUgIlNBUEkuaCIKKyNpbmNsdWRlICJwaHBfbWFpbi5oIgogI2lu Y2x1ZGUgInBocF9zZXNzaW9uLmgiCiAjaW5jbHVkZSAiZXh0L3N0YW5kYXJkL21kNS5oIgog I2luY2x1ZGUgImV4dC9zdGFuZGFyZC9zaGExLmgiCkBAIC0yMDEyLDcgKzIwMTMsOSBAQCBz dGF0aWMgUEhQX1JJTklUX0ZVTkNUSU9OKHNlc3Npb24pIC8qIHt7eyAqLwogCiBzdGF0aWMg UEhQX1JTSFVURE9XTl9GVU5DVElPTihzZXNzaW9uKSAvKiB7e3sgKi8KIHsKLQlwaHBfc2Vz c2lvbl9mbHVzaChUU1JNTFNfQyk7CisJLyogZG8gbm90IGZsdXNoIHNlc3Npb24sIHRoZSBm bHVzaCBtZXRob2QgaXMgYXNzaWduZWQgdG8KKwkgICBwaHBfc2Vzc2lvbl9wcmVfc2h1dGRv d25fZnVuY3Rpb24gaW4gdGhlIE1JTklULCBzbyBpdCB3aWxsIGJlIGNhbGxlZAorCSAgIEJF Rk9SRSBleGVjdXRpb24gaGFzIGVuZGVkISAqLwogCXBocF9yc2h1dGRvd25fc2Vzc2lvbl9n bG9iYWxzKFRTUk1MU19DKTsKIAogCXJldHVybiBTVUNDRVNTOwpAQCAtMjA0NCw2ICsyMDQ3 LDEwIEBAIHN0YXRpYyBQSFBfTUlOSVRfRlVOQ1RJT04oc2Vzc2lvbikgLyoge3t7ICovCiAj aWZkZWYgSEFWRV9MSUJNTQogCVBIUF9NSU5JVChwc19tbSkgKElOSVRfRlVOQ19BUkdTX1BB U1NUSFJVKTsKICNlbmRpZgorCisJLyogRmx1c2ggdGhlIHNlc3Npb24ganVzdCBiZWZvcmUg c2h1dGRvd24uICovCisJcGhwX3Nlc3Npb25fcHJlX3NodXRkb3duX2Z1bmN0aW9uID0gcGhw X3Nlc3Npb25fZmx1c2g7CisKIAlyZXR1cm4gU1VDQ0VTUzsKIH0KIC8qIH19fSAqLwpAQCAt MjA1OSw2ICsyMDY2LDggQEAgc3RhdGljIFBIUF9NU0hVVERPV05fRlVOQ1RJT04oc2Vzc2lv bikgLyoge3t7ICovCiAJcHNfc2VyaWFsaXplcnNbUFJFREVGSU5FRF9TRVJJQUxJWkVSU10u bmFtZSA9IE5VTEw7CiAJbWVtc2V0KCZwc19tb2R1bGVzW1BSRURFRklORURfTU9EVUxFU10s IDAsIChNQVhfTU9EVUxFUy1QUkVERUZJTkVEX01PRFVMRVMpKnNpemVvZihwc19tb2R1bGUg KikpOwogCisJcGhwX3Nlc3Npb25fcHJlX3NodXRkb3duX2Z1bmN0aW9uID0gTlVMTDsKKwog CXJldHVybiBTVUNDRVNTOwogfQogLyogfX19ICovCkluZGV4OiBtYWluL3BocF9tYWluLmgK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gbWFpbi9waHBfbWFpbi5oCShyZXZpc2lvbiAyOTUyNTEpCisr KyBtYWluL3BocF9tYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDggQEAgUEhQ QVBJIGludCBwaHBfc3RyZWFtX29wZW5fZm9yX3plbmRfZXgoY29uc3QgY2hhcgogZXh0ZXJu IHZvaWQgcGhwX2NhbGxfc2h1dGRvd25fZnVuY3Rpb25zKFRTUk1MU19EKTsKIGV4dGVybiB2 b2lkIHBocF9mcmVlX3NodXRkb3duX2Z1bmN0aW9ucyhUU1JNTFNfRCk7CiAKK2V4dGVybiB2 b2lkICgqcGhwX3Nlc3Npb25fcHJlX3NodXRkb3duX2Z1bmN0aW9uKShUU1JNTFNfRCk7CisK IC8qIGVudmlyb25tZW50IG1vZHVsZSAqLwogZXh0ZXJuIGludCBwaHBfaW5pdF9lbnZpcm9u KHZvaWQpOwogZXh0ZXJuIGludCBwaHBfc2h1dGRvd25fZW52aXJvbih2b2lkKTsKSW5kZXg6 IG1haW4vbWFpbi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1haW4vbWFpbi5jCShyZXZpc2lvbiAy OTUyNTEpCisrKyBtYWluL21haW4uYwkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsOCBA QAogI2luY2x1ZGUgInJmYzE4NjcuaCIKIC8qIH19fSAqLwogCit2b2lkICgqcGhwX3Nlc3Np b25fcHJlX3NodXRkb3duX2Z1bmN0aW9uKShUU1JNTFNfRCkgPSBOVUxMOworCiAjaWZuZGVm IFpUUwogcGhwX2NvcmVfZ2xvYmFscyBjb3JlX2dsb2JhbHM7CiAjZWxzZQpAQCAtMTQ1OCw2 ICsxNDYwLDEyIEBAIHZvaWQgcGhwX3JlcXVlc3Rfc2h1dGRvd24odm9pZCAqZHVtbXkpCiAJ CXBocF9jYWxsX3NodXRkb3duX2Z1bmN0aW9ucyhUU1JNTFNfQyk7CiAJfSB6ZW5kX2VuZF90 cnkoKTsKIAorCS8qIDEuNSBTaHV0ZG93biBzZXNzaW9uIGlmIGFwcGxpY2FibGUKKwkgICBF eGVjdXRpb24gbXVzdCBzdGlsbCBiZSBvbmdvaW5nIGJlY2F1c2Ugb2YgdXNlcnNwYWNlIHNh dmUgaGFuZGxlcnMuICovCisJaWYgKFBHKG1vZHVsZXNfYWN0aXZhdGVkKSkgemVuZF90cnkg eworCQlpZiAocGhwX3Nlc3Npb25fcHJlX3NodXRkb3duX2Z1bmN0aW9uKSBwaHBfc2Vzc2lv bl9wcmVfc2h1dGRvd25fZnVuY3Rpb24oVFNSTUxTX0MpOworCX0gemVuZF9lbmRfdHJ5KCk7 CisKIAkvKiAyLiBDYWxsIGFsbCBwb3NzaWJsZSBfX2Rlc3RydWN0KCkgZnVuY3Rpb25zICov CiAJemVuZF90cnkgewogCQl6ZW5kX2NhbGxfZGVzdHJ1Y3RvcnMoVFNSTUxTX0MpOwo= --------------080605070005040300000902 Content-Type: text/plain; name="session-save-handler-execution.php53.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="session-save-handler-execution.php53.patch" SW5kZXg6IGV4dC9zZXNzaW9uL3Nlc3Npb24uYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBleHQvc2Vz c2lvbi9zZXNzaW9uLmMJKHJldmlzaW9uIDI5NTI1NCkKKysrIGV4dC9zZXNzaW9uL3Nlc3Np b24uYwkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogCiAjaW5jbHVkZSAicGhw X2luaS5oIgogI2luY2x1ZGUgIlNBUEkuaCIKKyNpbmNsdWRlICJwaHBfbWFpbi5oIgogI2lu Y2x1ZGUgInBocF9zZXNzaW9uLmgiCiAjaW5jbHVkZSAiZXh0L3N0YW5kYXJkL21kNS5oIgog I2luY2x1ZGUgImV4dC9zdGFuZGFyZC9zaGExLmgiCkBAIC0yMTQwLDcgKzIxNDEsOSBAQCBz dGF0aWMgUEhQX1JTSFVURE9XTl9GVU5DVElPTihzZXNzaW9uKSAvKiB7e3sgKi8KIHsKIAlp bnQgaTsKIAotCXBocF9zZXNzaW9uX2ZsdXNoKFRTUk1MU19DKTsKKwkvKiBkbyBub3QgZmx1 c2ggc2Vzc2lvbiwgdGhlIGZsdXNoIG1ldGhvZCBpcyBhc3NpZ25lZCB0bworCSAgIHBocF9z ZXNzaW9uX3ByZV9zaHV0ZG93bl9mdW5jdGlvbiBpbiB0aGUgTUlOSVQsIHNvIGl0IHdpbGwg YmUgY2FsbGVkCisJICAgQkVGT1JFIGV4ZWN1dGlvbiBoYXMgZW5kZWQhICovCiAJcGhwX3Jz aHV0ZG93bl9zZXNzaW9uX2dsb2JhbHMoVFNSTUxTX0MpOwogCiAJLyogdGhpcyBzaG91bGQg Tk9UIGJlIGRvbmUgaW4gcGhwX3JzaHV0ZG93bl9zZXNzaW9uX2dsb2JhbHMoKSAqLwpAQCAt MjE4NSw2ICsyMTg4LDEwIEBAIHN0YXRpYyBQSFBfTUlOSVRfRlVOQ1RJT04oc2Vzc2lvbikg Lyoge3t7ICovCiAjaWZkZWYgSEFWRV9MSUJNTQogCVBIUF9NSU5JVChwc19tbSkgKElOSVRf RlVOQ19BUkdTX1BBU1NUSFJVKTsKICNlbmRpZgorCisJLyogRmx1c2ggdGhlIHNlc3Npb24g anVzdCBiZWZvcmUgc2h1dGRvd24uICovCisJcGhwX3Nlc3Npb25fcHJlX3NodXRkb3duX2Z1 bmN0aW9uID0gcGhwX3Nlc3Npb25fZmx1c2g7CisKIAlyZXR1cm4gU1VDQ0VTUzsKIH0KIC8q IH19fSAqLwpAQCAtMjIwMCw2ICsyMjA3LDggQEAgc3RhdGljIFBIUF9NU0hVVERPV05fRlVO Q1RJT04oc2Vzc2lvbikgLyoge3t7ICovCiAJcHNfc2VyaWFsaXplcnNbUFJFREVGSU5FRF9T RVJJQUxJWkVSU10ubmFtZSA9IE5VTEw7CiAJbWVtc2V0KCZwc19tb2R1bGVzW1BSRURFRklO RURfTU9EVUxFU10sIDAsIChNQVhfTU9EVUxFUy1QUkVERUZJTkVEX01PRFVMRVMpKnNpemVv Zihwc19tb2R1bGUgKikpOwogCisJcGhwX3Nlc3Npb25fcHJlX3NodXRkb3duX2Z1bmN0aW9u ID0gTlVMTDsKKwogCXJldHVybiBTVUNDRVNTOwogfQogLyogfX19ICovCkluZGV4OiBtYWlu L3BocF9tYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWFpbi9waHBfbWFpbi5oCShyZXZpc2lv biAyOTUyNTQpCisrKyBtYWluL3BocF9tYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYg KzUyLDggQEAgUEhQQVBJIGludCBwaHBfc3RyZWFtX29wZW5fZm9yX3plbmRfZXgoY29uc3Qg Y2hhcgogZXh0ZXJuIHZvaWQgcGhwX2NhbGxfc2h1dGRvd25fZnVuY3Rpb25zKFRTUk1MU19E KTsKIGV4dGVybiB2b2lkIHBocF9mcmVlX3NodXRkb3duX2Z1bmN0aW9ucyhUU1JNTFNfRCk7 CiAKK2V4dGVybiB2b2lkICgqcGhwX3Nlc3Npb25fcHJlX3NodXRkb3duX2Z1bmN0aW9uKShU U1JNTFNfRCk7CisKIC8qIGVudmlyb25tZW50IG1vZHVsZSAqLwogZXh0ZXJuIGludCBwaHBf aW5pdF9lbnZpcm9uKHZvaWQpOwogZXh0ZXJuIGludCBwaHBfc2h1dGRvd25fZW52aXJvbih2 b2lkKTsKSW5kZXg6IG1haW4vbWFpbi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1haW4vbWFpbi5j CShyZXZpc2lvbiAyOTUyNTQpCisrKyBtYWluL21haW4uYwkod29ya2luZyBjb3B5KQpAQCAt MTA0LDYgKzEwNCw4IEBACiAKIFBIUEFQSSBpbnQgKCpwaHBfcmVnaXN0ZXJfaW50ZXJuYWxf ZXh0ZW5zaW9uc19mdW5jKShUU1JNTFNfRCkgPSBwaHBfcmVnaXN0ZXJfaW50ZXJuYWxfZXh0 ZW5zaW9uczsKIAordm9pZCAoKnBocF9zZXNzaW9uX3ByZV9zaHV0ZG93bl9mdW5jdGlvbiko VFNSTUxTX0QpID0gTlVMTDsKKwogI2lmbmRlZiBaVFMKIHBocF9jb3JlX2dsb2JhbHMgY29y ZV9nbG9iYWxzOwogI2Vsc2UKQEAgLTE1ODIsNiArMTU4NCwxMiBAQCB2b2lkIHBocF9yZXF1 ZXN0X3NodXRkb3duKHZvaWQgKmR1bW15KQogCQlwaHBfY2FsbF9zaHV0ZG93bl9mdW5jdGlv bnMoVFNSTUxTX0MpOwogCX0gemVuZF9lbmRfdHJ5KCk7CiAKKwkvKiAxLjUgU2h1dGRvd24g c2Vzc2lvbiBpZiBhcHBsaWNhYmxlCisJICAgRXhlY3V0aW9uIG11c3Qgc3RpbGwgYmUgb25n b2luZyBiZWNhdXNlIG9mIHVzZXJzcGFjZSBzYXZlIGhhbmRsZXJzLiAqLworCWlmIChQRyht b2R1bGVzX2FjdGl2YXRlZCkpIHplbmRfdHJ5IHsKKwkJaWYgKHBocF9zZXNzaW9uX3ByZV9z aHV0ZG93bl9mdW5jdGlvbikgcGhwX3Nlc3Npb25fcHJlX3NodXRkb3duX2Z1bmN0aW9uKFRT Uk1MU19DKTsKKwl9IHplbmRfZW5kX3RyeSgpOworCiAJLyogMi4gQ2FsbCBhbGwgcG9zc2li bGUgX19kZXN0cnVjdCgpIGZ1bmN0aW9ucyAqLwogCXplbmRfdHJ5IHsKIAkJemVuZF9jYWxs X2Rlc3RydWN0b3JzKFRTUk1MU19DKTsK --------------080605070005040300000902 Content-Type: text/plain; name="session-save-handler-execution.php6.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="session-save-handler-execution.php6.patch" SW5kZXg6IGV4dC9zZXNzaW9uL3Nlc3Npb24uYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBleHQvc2Vz c2lvbi9zZXNzaW9uLmMJKHJldmlzaW9uIDI5NTI1NCkKKysrIGV4dC9zZXNzaW9uL3Nlc3Np b24uYwkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIlNBUEku aCIKICNpbmNsdWRlICJyZmMxODY3LmgiCiAjaW5jbHVkZSAicGhwX3ZhcmlhYmxlcy5oIgor I2luY2x1ZGUgInBocF9tYWluLmgiCiAjaW5jbHVkZSAicGhwX3Nlc3Npb24uaCIKICNpbmNs dWRlICJleHQvc3RhbmRhcmQvbWQ1LmgiCiAjaW5jbHVkZSAiZXh0L3N0YW5kYXJkL3NoYTEu aCIKQEAgLTE5NjgsNyArMTk2OSw5IEBAIHN0YXRpYyBQSFBfUlNIVVRET1dOX0ZVTkNUSU9O KHNlc3Npb24pIC8qIHt7eyAqLwogewogCWludCBpOwogCi0JcGhwX3Nlc3Npb25fZmx1c2go VFNSTUxTX0MpOworCS8qIGRvIG5vdCBmbHVzaCBzZXNzaW9uLCB0aGUgZmx1c2ggbWV0aG9k IGlzIGFzc2lnbmVkIHRvCisJICAgcGhwX3Nlc3Npb25fcHJlX3NodXRkb3duX2Z1bmN0aW9u IGluIHRoZSBNSU5JVCwgc28gaXQgd2lsbCBiZSBjYWxsZWQKKwkgICBCRUZPUkUgZXhlY3V0 aW9uIGhhcyBlbmRlZCEgKi8KIAlwaHBfcnNodXRkb3duX3Nlc3Npb25fZ2xvYmFscyhUU1JN TFNfQyk7CiAKIAkvKiB0aGlzIHNob3VsZCBOT1QgYmUgZG9uZSBpbiBwaHBfcnNodXRkb3du X3Nlc3Npb25fZ2xvYmFscygpICovCkBAIC0yMDE1LDYgKzIwMTgsMTAgQEAgc3RhdGljIFBI UF9NSU5JVF9GVU5DVElPTihzZXNzaW9uKSAvKiB7e3sgKi8KICNlbmRpZgogCXBocF9zZXNz aW9uX3JmYzE4Njdfb3JpZ19jYWxsYmFjayA9IHBocF9yZmMxODY3X2NhbGxiYWNrOwogCXBo cF9yZmMxODY3X2NhbGxiYWNrID0gcGhwX3Nlc3Npb25fcmZjMTg2N19jYWxsYmFjazsKKwor CS8qIEZsdXNoIHRoZSBzZXNzaW9uIGp1c3QgYmVmb3JlIHNodXRkb3duLiAqLworCXBocF9z ZXNzaW9uX3ByZV9zaHV0ZG93bl9mdW5jdGlvbiA9IHBocF9zZXNzaW9uX2ZsdXNoOworCiAJ cmV0dXJuIFNVQ0NFU1M7CiB9CiAvKiB9fX0gKi8KQEAgLTIwMzAsNiArMjAzNyw4IEBAIHN0 YXRpYyBQSFBfTVNIVVRET1dOX0ZVTkNUSU9OKHNlc3Npb24pIC8qIHt7eyAqLwogCXBzX3Nl cmlhbGl6ZXJzW1BSRURFRklORURfU0VSSUFMSVpFUlNdLm5hbWUgPSBOVUxMOwogCW1lbXNl dCgmcHNfbW9kdWxlc1tQUkVERUZJTkVEX01PRFVMRVNdLCAwLCAoTUFYX01PRFVMRVMtUFJF REVGSU5FRF9NT0RVTEVTKSpzaXplb2YocHNfbW9kdWxlICopKTsKIAorCXBocF9zZXNzaW9u X3ByZV9zaHV0ZG93bl9mdW5jdGlvbiA9IE5VTEw7CisKIAlyZXR1cm4gU1VDQ0VTUzsKIH0K IC8qIH19fSAqLwpJbmRleDogbWFpbi9waHBfbWFpbi5oCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1h aW4vcGhwX21haW4uaAkocmV2aXNpb24gMjk1MjU0KQorKysgbWFpbi9waHBfbWFpbi5oCSh3 b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw4IEBAIFBIUEFQSSBpbnQgcGhwX3N0cmVhbV9v cGVuX2Zvcl96ZW5kX2V4KGNvbnN0IGNoYXIKIGV4dGVybiB2b2lkIHBocF9jYWxsX3NodXRk b3duX2Z1bmN0aW9ucyhUU1JNTFNfRCk7CiBleHRlcm4gdm9pZCBwaHBfZnJlZV9zaHV0ZG93 bl9mdW5jdGlvbnMoVFNSTUxTX0QpOwogCitleHRlcm4gdm9pZCAoKnBocF9zZXNzaW9uX3By ZV9zaHV0ZG93bl9mdW5jdGlvbikoVFNSTUxTX0QpOworCiAvKiBlbnZpcm9ubWVudCBtb2R1 bGUgKi8KIGV4dGVybiBpbnQgcGhwX2luaXRfZW52aXJvbih2b2lkKTsKIGV4dGVybiBpbnQg cGhwX3NodXRkb3duX2Vudmlyb24odm9pZCk7CkluZGV4OiBtYWluL21haW4uYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBtYWluL21haW4uYwkocmV2aXNpb24gMjk1MjU0KQorKysgbWFpbi9tYWlu LmMJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsOCBAQAogCiBQSFBBUEkgaW50ICgq cGhwX3JlZ2lzdGVyX2ludGVybmFsX2V4dGVuc2lvbnNfZnVuYykoVFNSTUxTX0QpID0gcGhw X3JlZ2lzdGVyX2ludGVybmFsX2V4dGVuc2lvbnM7CiAKK3ZvaWQgKCpwaHBfc2Vzc2lvbl9w cmVfc2h1dGRvd25fZnVuY3Rpb24pKFRTUk1MU19EKSA9IE5VTEw7CisKICNpZm5kZWYgWlRT CiBwaHBfY29yZV9nbG9iYWxzIGNvcmVfZ2xvYmFsczsKICNlbHNlCkBAIC0xNjgxLDYgKzE2 ODMsMTIgQEAgdm9pZCBwaHBfcmVxdWVzdF9zaHV0ZG93bih2b2lkICpkdW1teSkKIAkJemVu ZF9jYWxsX2Rlc3RydWN0b3JzKFRTUk1MU19DKTsKIAl9IHplbmRfZW5kX3RyeSgpOwogCisJ LyogMS41IFNodXRkb3duIHNlc3Npb24gaWYgYXBwbGljYWJsZQorCSAgIEV4ZWN1dGlvbiBt dXN0IHN0aWxsIGJlIG9uZ29pbmcgYmVjYXVzZSBvZiB1c2Vyc3BhY2Ugc2F2ZSBoYW5kbGVy cy4gKi8KKwlpZiAoUEcobW9kdWxlc19hY3RpdmF0ZWQpKSB6ZW5kX3RyeSB7CisJCWlmIChw aHBfc2Vzc2lvbl9wcmVfc2h1dGRvd25fZnVuY3Rpb24pIHBocF9zZXNzaW9uX3ByZV9zaHV0 ZG93bl9mdW5jdGlvbihUU1JNTFNfQyk7CisJfSB6ZW5kX2VuZF90cnkoKTsKKwogCS8qIDIu IENhbGwgYWxsIHBvc3NpYmxlIHNodXRkb3duIGZ1bmN0aW9ucyByZWdpc3RlcmVkIHdpdGgg cmVnaXN0ZXJfc2h1dGRvd25fZnVuY3Rpb24oKSAqLwogCWlmIChQRyhtb2R1bGVzX2FjdGl2 YXRlZCkpIHplbmRfdHJ5IHsKIAkJcGhwX2NhbGxfc2h1dGRvd25fZnVuY3Rpb25zKFRTUk1M U19DKTsK --------------080605070005040300000902--