From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25285 invoked by alias); 18 Nov 2004 03:38:30 -0000 Mailing-List: contact pthreads-win32-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: pthreads-win32-owner@sources.redhat.com Received: (qmail 25221 invoked from network); 18 Nov 2004 03:38:16 -0000 Received: from unknown (HELO smtp.263.net) (211.150.96.24) by sourceware.org with SMTP; 18 Nov 2004 03:38:16 -0000 Received: by smtp.263.net (Postfix, from userid 500) id 8BE764392B; Thu, 18 Nov 2004 11:38:14 +0800 (CST) From: qybupt@263.net To: pthreads-win32@sources.redhat.com Subject: Possible violation of synchronization in pthread_cond_timedwait() Date: Thu, 18 Nov 2004 03:38:00 -0000 MIME-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 Message-Id: <20041118033814.8BE764392B@smtp.263.net> X-SW-Source: 2004/txt/msg00150.txt.bz2 SGVsbG8gZ3V5czoNCg0KICAgIFdoZW4gSSBhbSB1c2luZyB0aGUgcHRocmVh ZC13aW4zMiBpbiBhIHByb2dyYW0gd2hpY2ggd2lsbCBiZSBwb3J0YWJsZSBv biB3aW5kb3dzIGFuZCBMaW51eCwNCiBJIGZpbmQgYSBwcm9ibGVtIG9mIHB0 aHJlYWRfY29uZF90aW1lZHdhaXQoKS4gDQogICAgICAgIA0KICAgIEl0IGlz IGEgdmVyeSBzaW1wbGUgc2NlbmFyaW8uIFRoZXJlIGlzIG9uZSBtZXNzYWdl IHF1ZXVlLCBvbmUgdGhyZWFkIHBvcHBpbmcgbWVzc2FnZXMgZnJvbSANCml0 IGFuZCBhbm90aGVyIG9uZSBwdXNoaW5nIG1lc3NhZ2VzIGludG8gaXQuIFdo ZW4gdGhlcmUgaXMgbm9uZSBtZXNzYWdlIGluIHRoZSBxdWV1ZSwgdGhlIA0K cG9wcGluZyB0aHJlYWQgd2lsbCB3YWl0IGZvciBhIGNvbmRpdGlvbi4gT24g dGhlIG90aGVyIHNpZGUsIHRoZSBwdXNoaW5nIHRocmVhZCB3aWxsIHdhaXQg Zm9yIA0KdGhlIHNhbWUgY29uZGl0aW9uIHdoZW4gdGhlIHF1ZXVlIGlzIGZ1 bGwuIEkgdXNlIHRoZSBwdGhyZWFkX2NvbmRfdGltZWR3YWl0IGJlY2F1c2Ug SSB3YW50IHRoZSANCndhaXRpbmcgdGhyZWFkIG5vdCB0byBibG9jayBmb3Ig ZXZlci4gSG93ZXZlciwgSSBmb3VuZCB0aGF0IHRoZSBwb3BwaW5nIHRocmVh ZCBzb21ldGltZXMgDQpleGVjdXRlZCB0aGUgY29kZSB0byBwb3AgbWVzc2Fn ZSB3aGVuIHRoZSBxdWV1ZSB3YXMgZW1wdHkhIFRoZSB0ZXN0IGNvZGUgaXMg YmVsb3c6IA0KKFBsZWFzZSBwYXkgYXR0ZW50aW9uIHRvIHRoZSBDQXVkaW9N ZXNzYWdlUXVldWU6OnF1ZXVlUG9wKCkgYW5kIENBdWRpb01lc3NhZ2VRdWV1 ZTo6cXVldWVQdXNoKCkpDQoNCi8vIFRlc3RXYWl0VGltZU91dC5jcHANCiNp bmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1 ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHdpbmRvd3MuaD4NCiNpbmNsdWRl ICJzY2hlZC5oIg0KI2luY2x1ZGUgInB0aHJlYWQuaCINCiNpbmNsdWRlICJD QXVkaW9NZXNzYWdlLmgiDQojaW5jbHVkZSAiQ0F1ZGlvTWVzc2FnZVF1ZXVl LmgiDQoNCmJvb2wgaXNTaHV0ZG93biA9IGZhbHNlOw0KQ0F1ZGlvTWVzc2Fn ZVF1ZXVlICpwTWVzc2FnZVF1ZXVlID0gTlVMTDsNCg0KZXh0ZXJuICJDInsN Cgl2b2lkKiAgX19jZGVjbCBwdXNoKHZvaWQqIHBhcmFtKQ0KCXsNCgkJQ0F1 ZGlvTWVzc2FnZSBtc2c7DQoJCWNoYXIgKnBTdHI7DQoJCWludCBpID0gMDsN CgkJd2hpbGUodHJ1ZSkgIHsNCgkJCWlmKGlzU2h1dGRvd24pIHsNCgkJCQli cmVhazsNCgkJCX0NCgkJCW1zZy5zZXREYXRhKE5VTEwpOw0KCQkJbXNnLnNl dERhdGFTaXplKDApOw0KCQkJcFN0ciA9IChjaGFyICopbWFsbG9jKDEwMCpz aXplb2YoY2hhcikpOw0KCQkJbWVtc2V0KHBTdHIsIDAsIDEwMCk7DQoJCQkv L3ByaW50ZigiaW4gTWVzc2FnZVB1c2hlciwgYWRkcmVzcyA9ICV4XG4iLCAo bG9uZylwU3RyKTsNCgkJCXNwcmludGYocFN0ciwgIiVkIiwgaSk7IA0KCQkJ bXNnLnNldERhdGEocFN0cik7DQoJCQltc2cuc2V0RGF0YVNpemUoMTAwKTsN CgkJCWlmKCFwTWVzc2FnZVF1ZXVlLT5xdWV1ZVB1c2gobXNnKSkgew0KCQkJ CWZyZWUocFN0cik7DQoJCQl9DQoJCQlpKys7DQoJCQlTbGVlcCgyMCk7DQoJ CX0NCgkJcmV0dXJuIE5VTEw7DQoJfQ0KfQ0KDQpleHRlcm4gIkMiew0KCXZv aWQqICBfX2NkZWNsIHBvcCh2b2lkKiBwYXJhbSkNCgl7DQoJCUNBdWRpb01l c3NhZ2UgbXNnOw0KCQlpbnQgaSA9IDA7DQoJCXdoaWxlKHRydWUpIHsNCgkJ CWlmKGlzU2h1dGRvd24pIHsNCgkJCQlicmVhazsNCgkJCX0NCgkJCW1zZy5z ZXREYXRhKE5VTEwpOw0KCQkJbXNnLnNldERhdGFTaXplKDApOw0KCQkJaWYo IXBNZXNzYWdlUXVldWUtPnF1ZXVlUG9wKG1zZykpIHsNCgkJCQljb250aW51 ZTsNCgkJCX0NCgkJCS8vcHJpbnRmKCJpbiBNZXNzYWdlUG9wZXIsIGFkZHJl c3MgPSAleFxuIiwgKGxvbmcpbXNnLmdldERhdGEoKSk7DQoJCQlmcmVlKG1z Zy5nZXREYXRhKCkpOw0KCQkJaSsrOw0KCQkJLy9TbGVlcCgxKTsNCgkJfQ0K CQlyZXR1cm4gTlVMTDsNCgl9DQp9DQoNCmludCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pIHsNCglwdGhyZWFkX3QgdGlkUHVzaGVyLCB0aWRQb3Bl cjsNCglwTWVzc2FnZVF1ZXVlID0gbmV3IENBdWRpb01lc3NhZ2VRdWV1ZSgx MCk7DQoJDQoJaWYgKDAgIT0gcHRocmVhZF9jcmVhdGUoJnRpZFB1c2hlciwg TlVMTCwgJnB1c2gsIE5VTEwpKSB7DQoJCXByaW50ZigiZmFpbCB0byBzdGFy dCBwdXNoZXJcbiIpOw0KCQlyZXR1cm4gMTsNCgl9DQoJaWYgKDAgIT0gcHRo cmVhZF9jcmVhdGUoJnRpZFBvcGVyLCBOVUxMLCAmcG9wLCBOVUxMKSkgew0K CQlwcmludGYoImZhaWwgdG8gc3RhcnQgcG9wZXJcbiIpOw0KCQlyZXR1cm4g MTsNCgl9DQoNCglTbGVlcCgyMDAwMDApOw0KCWlzU2h1dGRvd24gPSB0cnVl Ow0KCXByaW50Zigid2FpdCBmb3IgdGhlIHRocmVhZHMgdG8gc3RvcFxuIik7 DQoJU2xlZXAoNTAwMCk7DQoNCglyZXR1cm4gMDsNCn0NCg0KLy8gQ0F1ZGlv TWVzc2FnZVF1ZXVlLmgNCg0KI2lmbmRlZiBDQVVESU9NRVNTQUdFUVVFVUVf SA0KI2RlZmluZSBDQVVESU9NRVNTQUdFUVVFVUVfSA0KI2luY2x1ZGUgInB0 aHJlYWQuaCINCiNpbmNsdWRlICJDQXVkaW9NZXNzYWdlLmgiDQogDQpjbGFz cyBDQXVkaW9NZXNzYWdlUXVldWUgDQp7DQpwdWJsaWM6DQogICAgLy8gY29u c3RydWN0b3INCiAgICAvLyB0aGUgZGVzdHJ1Y3RvciB3aWxsIHJlbGVhc2Ug dGhlIHN0b3JhZ2UgcG9pbnRlZCBieSB0aGVzZSB0d28gYXJndW1lbnRzDQog ICAgQ0F1ZGlvTWVzc2FnZVF1ZXVlKCk7DQogICAgQ0F1ZGlvTWVzc2FnZVF1 ZXVlKGludCBtYXhTaXplKTsNCiAgICAvLyBkZXN0cnVjdG9yDQogICAgdmly dHVhbCB+Q0F1ZGlvTWVzc2FnZVF1ZXVlKCk7DQogICAgLy8gR2V0IHF1ZXVl IG1heCBzaXplLg0KICAgIGludCBnZXRNYXhTaXplKHZvaWQpOw0KICAgIC8v IFNldCBxdWV1ZSBzaXplLg0KICAgIHZvaWQgc2V0TWF4U2l6ZShpbnQgc2l6 ZSk7DQogICAgLy8gR2V0IHF1ZXVlIGN1cnJlbnQgc2l6ZS4NCiAgICBpbnQg Z2V0Q3VycmVudFNpemUodm9pZCk7DQogICAgLy8gUHVzaCBtZXNzYWdlIHRv IHF1ZXJ5IHRhaWwsIHRoaXMgcXVldWUgd2lsbCBrZWVwIGl0cyBvd24gY29w eSBvZiBtc2cNCiAgICBib29sIHF1ZXVlUHVzaChjb25zdCBDQXVkaW9NZXNz YWdlJiBtc2cpOw0KICAgIGJvb2wgcXVldWVQdXNoKGNvbnN0IENBdWRpb01l c3NhZ2UqIG1zZyk7DQogICAgLy8gUG9wIG1lc3NhZ2UgZnJvbSBxdWVyeSBo ZWFkLCB0aGlzIHF1ZXVlIHdpbGwgcmVsZWFzZSBzdG9yYWdlIG9mIGl0cyBv d24gY29weQ0KICAgIGJvb2wgcXVldWVQb3AoQ0F1ZGlvTWVzc2FnZSYgbXNn KTsNCiAgICBib29sIHF1ZXVlUG9wKENBdWRpb01lc3NhZ2UqIG1zZyk7DQog ICAgLy8gSXMgcXVldWUgZnVsbD8NCiAgICBib29sIGlzRnVsbCh2b2lkKTsN CiAgICAvLyBJcyBxdWV1ZSBlbXB0eT8NCiAgICBib29sIGlzRW1wdHkodm9p ZCk7DQogICAgc3RydWN0IHRpbWVzcGVjIGdldFRpbWVPdXQoKTsNCg0KcHJp dmF0ZToNCiAgICBDQXVkaW9NZXNzYWdlKiBtX2hlYWQ7DQogICAgQ0F1ZGlv TWVzc2FnZSogbV90YWlsOw0KICAgIGludCBtX21heFNpemU7DQogICAgaW50 IG1fY3VyU2l6ZTsNCiAgICBwdGhyZWFkX2NvbmRfdCBtX2NvbmQ7DQogICAg cHRocmVhZF9tdXRleF90IG1fbXV0ZXg7DQp9Ow0KDQojZW5kaWYvLyBDQVVE SU9NRVNTQUdFUVVFVUVfSA0KDQovLyBDQXVkaW9NZXNzYWdlUXVldWUuY3Bw DQojaW5jbHVkZSA8c3RkaW8uaD4NCiNpbmNsdWRlIDxzeXMvdGltZWIuaD4g DQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZSA8bWF0aC5oPiAN CiNpbmNsdWRlICJzY2hlZC5oIg0KI2luY2x1ZGUgInB0aHJlYWQuaCIgICAN CiNpbmNsdWRlICJDQXVkaW9NZXNzYWdlUXVldWUuaCINCiNkZWZpbmUgQ09O RF9USU1FT1VUIDAuMDENCg0KQ0F1ZGlvTWVzc2FnZVF1ZXVlOjpDQXVkaW9N ZXNzYWdlUXVldWUoKSAgICAgDQp7DQogICAgbV9oZWFkID0gTlVMTDsNCiAg ICBtX3RhaWwgPSBOVUxMOw0KICAgIG1fbWF4U2l6ZSA9IDA7DQogICAgbV9j dXJTaXplID0gMDsNCiAgICBwdGhyZWFkX211dGV4X2luaXQoJm1fbXV0ZXgs IE5VTEwpOw0KICAgIHB0aHJlYWRfY29uZF9pbml0KCZtX2NvbmQsIE5VTEwp Ow0KfQ0KDQpDQXVkaW9NZXNzYWdlUXVldWU6OkNBdWRpb01lc3NhZ2VRdWV1 ZShpbnQgbWF4U2l6ZSkNCnsNCiAgICAvL0NBdWRpb01lc3NhZ2VRdWV1ZSgp Ow0KICAgIG1faGVhZCA9IE5VTEw7DQogICAgbV90YWlsID0gTlVMTDsNCiAg ICBtX21heFNpemUgPSAwOw0KICAgIG1fY3VyU2l6ZSA9IDA7DQogICAgcHRo cmVhZF9tdXRleF9pbml0KCZtX211dGV4LCBOVUxMKTsNCiAgICBwdGhyZWFk X2NvbmRfaW5pdCgmbV9jb25kLCBOVUxMKTsNCiAgICBtX21heFNpemUgPSBt YXhTaXplOw0KfQ0KDQovLyBkZXN0cnVjdG9yDQovLyBBdHRlbnRpb246IHRo ZSBDQXVkaW9NZXNzYWdlIG9iamVjdHMgaW4gdGhpcyBxdWV1ZSB3aWxsIGJl IHBvcHBlZCBvdXQsIGJ1dA0KLy8gdGhlaXIgc3RvcmFnZSB3aWxsIG5vdCBi ZSBmcmVlLCBpdCBpcyB0aGUgY2xpZW50J3MgcmVzcG9uc2liaWxpdHkuDQpD QXVkaW9NZXNzYWdlUXVldWU6On5DQXVkaW9NZXNzYWdlUXVldWUoKQ0Kew0K ICAgIENBdWRpb01lc3NhZ2UgbXNnOw0KICAgIHdoaWxlKG1fY3VyU2l6ZSA+ IDApIHsgDQogICAgICAgIHF1ZXVlUG9wKG1zZyk7DQogICAgfQ0KICAgIHB0 aHJlYWRfbXV0ZXhfZGVzdHJveSgmbV9tdXRleCk7DQogICAgcHRocmVhZF9j b25kX2Rlc3Ryb3koJm1fY29uZCk7DQp9DQoNCi8vIEdldCBxdWV1ZSBtYXgg c2l6ZS4NCmludCBDQXVkaW9NZXNzYWdlUXVldWU6OmdldE1heFNpemUodm9p ZCkNCnsNCiAgICBpbnQgc2l6ZTsNCg0KICAgIHB0aHJlYWRfbXV0ZXhfbG9j aygmbV9tdXRleCk7DQogICAgc2l6ZSA9IG1fbWF4U2l6ZTsNCiAgICBwdGhy ZWFkX211dGV4X3VubG9jaygmbV9tdXRleCk7DQoNCiAgICByZXR1cm4gc2l6 ZTsNCn0NCg0KLy8gU2V0IHF1ZXVlIHNpemUuDQp2b2lkIENBdWRpb01lc3Nh Z2VRdWV1ZTo6c2V0TWF4U2l6ZShpbnQgc2l6ZSkNCnsNCiAgICBwdGhyZWFk X211dGV4X2xvY2soJm1fbXV0ZXgpOw0KICAgIG1fbWF4U2l6ZSA9IHNpemU7 DQogICAgcHRocmVhZF9tdXRleF91bmxvY2soJm1fbXV0ZXgpOw0KfQ0KIA0K Ly8gR2V0IHF1ZXVlIGN1cnJlbnQgc2l6ZQ0KaW50IENBdWRpb01lc3NhZ2VR dWV1ZTo6Z2V0Q3VycmVudFNpemUodm9pZCkgDQp7DQogICAgaW50IHNpemU7 DQoNCiAgICBwdGhyZWFkX211dGV4X2xvY2soJm1fbXV0ZXgpOw0KICAgIHNp emUgPSBtX2N1clNpemU7DQogICAgcHRocmVhZF9tdXRleF91bmxvY2soJm1f bXV0ZXgpOw0KICAgIHJldHVybiBzaXplOw0KfQ0KDQoNCi8vIFB1c2ggbWVz c2FnZSB0byBxdWVyeSB0YWlsLg0KYm9vbCBDQXVkaW9NZXNzYWdlUXVldWU6 OnF1ZXVlUHVzaChjb25zdCBDQXVkaW9NZXNzYWdlJiBtc2cpDQp7DQogICAg Q0F1ZGlvTWVzc2FnZSogbWVzc2FnZSA9IG5ldyBDQXVkaW9NZXNzYWdlKG1z Zyk7DQogICAgDQogICAgLy8gY3JlYXRlIEF1ZGlvTWVzc2FnZSBmYWlsDQog ICAgaWYgKE5VTEwgPT0gbWVzc2FnZSkgcmV0dXJuIGZhbHNlOw0KICAgICAN CiAgICBwdGhyZWFkX211dGV4X2xvY2soJm1fbXV0ZXgpOw0KICAgIGlmKG1f Y3VyU2l6ZSA9PSBtX21heFNpemUpIHsgIA0KICAgICAgICBzdHJ1Y3QgdGlt ZXNwZWMgdGltZW91dCA9IGdldFRpbWVPdXQoKTsNCiAgICAgICAgaWYoMCAh PSBwdGhyZWFkX2NvbmRfdGltZWR3YWl0KCZtX2NvbmQsICZtX211dGV4LCAm dGltZW91dCkpIHsNCgkJLy9pZigwICE9IHB0aHJlYWRfY29uZF93YWl0KCZt X2NvbmQsICZtX211dGV4KSkgew0KICAgICAgICAgICAgcHRocmVhZF9tdXRl eF91bmxvY2soJm1fbXV0ZXgpOw0KICAgICAgICAgICAgcmV0dXJuIGZhbHNl Ow0KICAgICAgICB9DQogICAgfQ0KICAgIC8vIGFkZCBtZXNzYWdlIHRvIHF1 ZXVlLg0KICAgIGlmIChOVUxMID09IG1faGVhZCkgey8vcXVldWUgaXMgZW1w dHkNCiAgICAgICAgbV9oZWFkID0gbWVzc2FnZTsNCiAgICAgICAgbV90YWls ID0gbWVzc2FnZTsNCiAgICB9IGVsc2UgeyAvLyBxdWV1ZSBpcyBub3QgZW1w dHksIGFkZCBhZnRlciB0YWlsLg0KICAgICAgICBtX3RhaWwtPm1fbmV4dCA9 IG1lc3NhZ2U7DQogICAgICAgIG1fdGFpbCA9IG1lc3NhZ2U7DQogICAgfQ0K ICAgIG1lc3NhZ2UtPm1fbmV4dCA9IE5VTEw7DQogICAgbV9jdXJTaXplICsr Ow0KICAgIA0KICAgIC8vcHJpbnRmKCJwdXNoZWQgbWVzc2FnZSAlcyBpbnRv IHRoZSBxdWV1ZVxuIiwgbWVzc2FnZS0+Z2V0RGF0YSgpKTsNCiAgICAvL3By aW50ZigidGhlIGN1cnJlbnQgc2l6ZSBvZiBxdWV1ZSBpcyAlZFxuIiwgbV9j dXJTaXplKTsNCiAgICANCiAgICBwdGhyZWFkX2NvbmRfc2lnbmFsKCZtX2Nv bmQpOw0KICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtX211dGV4KTsNCiAg ICByZXR1cm4gdHJ1ZTsNCn0NCg0KYm9vbCBDQXVkaW9NZXNzYWdlUXVldWU6 OnF1ZXVlUHVzaChjb25zdCBDQXVkaW9NZXNzYWdlKiBtc2cpDQp7DQogICAg cmV0dXJuIENBdWRpb01lc3NhZ2VRdWV1ZTo6cXVldWVQdXNoKCptc2cpOw0K fQ0KDQovLyBQb3AgbWVzc2FnZSBmcm9tIHF1ZXJ5IGhlYWQuDQpib29sIENB dWRpb01lc3NhZ2VRdWV1ZTo6cXVldWVQb3AoQ0F1ZGlvTWVzc2FnZSYgbXNn KQ0Kew0KICAgIC8vIGVtcHR5IHF1ZXVlDQogICAgLy9pZiAoTlVMTCA9PSBt X2hlYWQpIHJldHVybiBmYWxzZTsNCg0KICAgIHB0aHJlYWRfbXV0ZXhfbG9j aygmbV9tdXRleCk7DQogICAgaWYobV9jdXJTaXplID09IDApIHsNCiAgICAg ICAgc3RydWN0IHRpbWVzcGVjIHRpbWVvdXQgPSBnZXRUaW1lT3V0KCk7DQog ICAgICAgIGlmKDAgIT0gcHRocmVhZF9jb25kX3RpbWVkd2FpdCgmbV9jb25k LCAmbV9tdXRleCwgJnRpbWVvdXQpKSB7DQoJCS8vaWYoMCAhPSBwdGhyZWFk X2NvbmRfd2FpdCgmbV9jb25kLCAmbV9tdXRleCkpIHsNCiAgICAgICAgICAg IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtX211dGV4KTsNCiAgICAgICAgICAg IHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIGRl bGV0ZSBtZXNzYWdlIGZyb20gcXVldWUuDQogICAgbXNnID0gKm1faGVhZDsg DQogICAgZGVsZXRlIG1faGVhZDsNCiAgICBtX2hlYWQgPSBtc2cubV9uZXh0 OyAvLyBoZWFkZXIgY2hhbmdlZA0KICAgIG1zZy5tX25leHQgPSBOVUxMOyAv LyBuZXh0IGlzIGlsbGVnYWwNCiAgICBpZiAoTlVMTCA9PSBtX2hlYWQpIG1f dGFpbCA9IE5VTEw7DQogICAgbV9jdXJTaXplIC0tOw0KDQogICAgLy9wcmlu dGYoInBvcGVkIG1lc3NhZ2UgJXMgZnJvbSB0aGUgcXVldWVcbiIsIG1zZy5n ZXREYXRhKCkpOw0KICAgIC8vcHJpbnRmKCJ0aGUgY3VycmVudCBzaXplIG9m IHF1ZXVlIGlzICVkXG4iLCBtX2N1clNpemUpOw0KDQogICAgLy8gdW5sb2Nr IG11dGV4IGlmIHN5bmNocm9uaXplZC4NCiAgICBwdGhyZWFkX2NvbmRfc2ln bmFsKCZtX2NvbmQpOw0KICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtX211 dGV4KTsNCiAgICByZXR1cm4gdHJ1ZTsNCn0NCg0KYm9vbCBDQXVkaW9NZXNz YWdlUXVldWU6OnF1ZXVlUG9wKENBdWRpb01lc3NhZ2UqIG1zZykNCnsNCiAg ICByZXR1cm4gQ0F1ZGlvTWVzc2FnZVF1ZXVlOjpxdWV1ZVBvcCgqbXNnKTsN Cn0NCg0KLy8gSXMgcXVldWUgZnVsbD8NCmJvb2wgQ0F1ZGlvTWVzc2FnZVF1 ZXVlOjppc0Z1bGwodm9pZCkNCnsNCiAgICBib29sIGZ1bGw7DQoNCiAgICAv LyBsb2NrIG11dGV4IGlmIHN5bmNocm9uaXplZC4NCiAgICBwdGhyZWFkX211 dGV4X2xvY2soJm1fbXV0ZXgpOw0KDQogICAgZnVsbCA9IChtX2N1clNpemUg PT0gbV9tYXhTaXplKSA/IHRydWUgOiBmYWxzZTsNCg0KICAgIC8vIHVubG9j ayBtdXRleCBpZiBzeW5jaHJvbml6ZWQuDQogICAgcHRocmVhZF9tdXRleF91 bmxvY2soJm1fbXV0ZXgpOw0KICAgIHJldHVybiBmdWxsOw0KfQ0KDQovLyBJ cyBxdWV1ZSBlbXB0eT8NCmJvb2wgQ0F1ZGlvTWVzc2FnZVF1ZXVlOjppc0Vt cHR5KHZvaWQpIA0Kew0KICAgIGJvb2wgZW1wdHk7DQoNCiAgICAvLyBsb2Nr IG11dGV4IGlmIHN5bmNocm9uaXplZC4NCiAgICBwdGhyZWFkX211dGV4X2xv Y2soJm1fbXV0ZXgpOw0KDQogICAgZW1wdHkgPSAobV9jdXJTaXplID09IDAp ID8gdHJ1ZSA6IGZhbHNlOw0KDQogICAgLy8gdW5sb2NrIG11dGV4IGlmIHN5 bmNocm9uaXplZC4NCiAgICBwdGhyZWFkX211dGV4X3VubG9jaygmbV9tdXRl eCk7DQogICAgcmV0dXJuIGVtcHR5Ow0KfQ0KDQp0aW1lc3BlYyBDQXVkaW9N ZXNzYWdlUXVldWU6OmdldFRpbWVPdXQoKSB7DQogICAgc3RydWN0IF90aW1l YiB0aW1lYnVmZmVyOw0KICAgIHN0cnVjdCB0aW1lc3BlYyB0aW1lb3V0Ow0K ICAgIF9mdGltZSgmdGltZWJ1ZmZlcik7DQogICAgdGltZW91dC50dl9zZWMg PSB0aW1lYnVmZmVyLnRpbWUgKyBmbG9vcihDT05EX1RJTUVPVVQpOw0KICAg IHRpbWVvdXQudHZfbnNlYyA9ICh0aW1lYnVmZmVyLm1pbGxpdG0gKyANCiAg ICAgICAgICAgICAgICAgICAgICAgIChDT05EX1RJTUVPVVQgLSBmbG9vcihD T05EX1RJTUVPVVQpKSAqIDEwMDApICogMTAwMDAwMDsNCiAgICANCiAgICBy ZXR1cm4gdGltZW91dDsNCn0NCiAgICANCi8vIENBdWRpb01lc3NhZ2UuaA0K I2lmbmRlZiBDQVVESU9NRVNTQUdFX0gNCiNkZWZpbmUgQ0FVRElPTUVTU0FH RV9IDQoNCi8vI2luY2x1ZGUgIkNBdWRpb1N0ZGluYy5oIg0KI2RlZmluZSBO VUxMIDANCg0KY2xhc3MgQ0F1ZGlvTWVzc2FnZVF1ZXVlOw0KDQpjbGFzcyBD QXVkaW9NZXNzYWdlIA0Kew0KICAgIGZyaWVuZCBjbGFzcyBDQXVkaW9NZXNz YWdlUXVldWU7DQpwdWJsaWM6DQogICAgQ0F1ZGlvTWVzc2FnZSgpOw0KICAg IENBdWRpb01lc3NhZ2UoY29uc3QgQ0F1ZGlvTWVzc2FnZSYgbXNnKTsNCiAg ICB2aXJ0dWFsIH5DQXVkaW9NZXNzYWdlKCk7DQogICAgdm9pZCBzZXREYXRh KHZvaWQqIGRhdGEpOw0KICAgIC8vIEdldCBkYXRhLg0KICAgIHZvaWQqIGdl dERhdGEodm9pZCkgY29uc3Q7DQogICAgLy8gU2V0IGRhdGEgc2l6ZS4NCiAg ICB2b2lkIHNldERhdGFTaXplKGludCBzaXplKTsgDQogICAgLy8gR2V0IGRh dGEgc2l6ZS4NCiAgICBpbnQgZ2V0RGF0YVNpemUodm9pZCkgY29uc3Q7DQog ICAgLy8gT3BlcmF0b3IgPQ0KICAgIENBdWRpb01lc3NhZ2UmIG9wZXJhdG9y PShjb25zdCBDQXVkaW9NZXNzYWdlJiByaWdodCk7DQoNCnByb3RlY3RlZDoN CiAgICBDQXVkaW9NZXNzYWdlICptX25leHQ7DQpwcml2YXRlOg0KICAgIHZv aWQqIG1fZGF0YTsNCiAgICBpbnQgbV9kYXRhU2l6ZTsNCn07DQoNCiNlbmRp Zi8vIENBVURJT01FU1NBR0VfSA0KDQovLyBDQXVkaW9NZXNzYWdlLmNwcA0K I2luY2x1ZGUgIkNBdWRpb01lc3NhZ2UuaCINCg0KLy8jaW5jbHVkZSA8c3Rk bGliLmg+DQovLyNpbmNsdWRlIDxzdHJpbmcuaD4NCiANCkNBdWRpb01lc3Nh Z2U6OkNBdWRpb01lc3NhZ2UoKQ0Kew0KICAgIG1fZGF0YSA9IE5VTEw7DQog ICAgbV9kYXRhU2l6ZSA9IDA7ICANCn0NCg0KQ0F1ZGlvTWVzc2FnZTo6Q0F1 ZGlvTWVzc2FnZShjb25zdCBDQXVkaW9NZXNzYWdlJiBtc2cpDQp7IA0KICAg IG1fZGF0YSA9IG1zZy5tX2RhdGE7DQogICAgbV9kYXRhU2l6ZSA9IG1zZy5t X2RhdGFTaXplOw0KfQ0KDQpDQXVkaW9NZXNzYWdlOjp+Q0F1ZGlvTWVzc2Fn ZSgpDQp7DQogICAgbV9kYXRhID0gTlVMTDsNCiAgICBtX2RhdGFTaXplID0g MDsNCn0NCg0KDQovLyBHZXQgZGF0YS4NCnZvaWQqIENBdWRpb01lc3NhZ2U6 OmdldERhdGEodm9pZCkgY29uc3QNCnsNCiAgICByZXR1cm4gbV9kYXRhOw0K fQ0KDQovLyBTZXQgZGF0YS4NCnZvaWQgQ0F1ZGlvTWVzc2FnZTo6c2V0RGF0 YSh2b2lkKiBkYXRhKQ0Kew0KICAgIG1fZGF0YSA9IGRhdGE7DQp9DQoNCi8v IEdldCBkYXRhIHNpemUuDQppbnQgQ0F1ZGlvTWVzc2FnZTo6Z2V0RGF0YVNp emUodm9pZCkgY29uc3QNCnsNCiAgICByZXR1cm4gbV9kYXRhU2l6ZTsNCn0N Cg0KLy8gU2V0IGRhdGEgc2l6ZS4NCnZvaWQgQ0F1ZGlvTWVzc2FnZTo6c2V0 RGF0YVNpemUoaW50IHNpemUpDQp7DQogICAgbV9kYXRhU2l6ZSA9IHNpemU7 DQp9DQoNCg0KLy8gT3BlcmF0b3IgPQ0KQ0F1ZGlvTWVzc2FnZSYgQ0F1ZGlv TWVzc2FnZTo6b3BlcmF0b3I9KGNvbnN0IENBdWRpb01lc3NhZ2UmIHJpZ2h0 KQ0Kew0KICAgIGlmICh0aGlzID09ICZyaWdodCkgcmV0dXJuICp0aGlzOw0K DQogICAgbV9uZXh0ID0gcmlnaHQubV9uZXh0Ow0KICAgIG1fZGF0YSA9IHJp Z2h0Lm1fZGF0YTsNCiAgICBtX2RhdGFTaXplID0gcmlnaHQubV9kYXRhU2l6 ZTsNCg0KICAgIHJldHVybiAqIHRoaXM7DQp9DQoNCkkgcnVuIGl0IGluIHRo ZSBWQzYuMCBhbmQgZm91bmQgdGhhdCBpbiBDQXVkaW9NZXNzYWdlUXVldWU6 OnF1ZXVlUG9wKCkgdGhlIHRocmVhZCBzb21ldGltZXMgDQpleGN1dGVkIHRo ZSAibXNnID0gKm1faGVhZDsiIHdoZW4gbV9oZWFkIHdhcyBlcXVhbCB0byBO VUxMISBUaGUgcHRocmVhZF9jb25kX3RpbWVkd2FpdCdzIG5vcm1hbCANCnJl dHVybiBpbmRpY2F0ZWQgdGhhdCB0aGUgY29uZGl0aW9uIHdhaXRlZCBoYWQg YmVlbiBzaWduYWxlZCBhbmQgdGhlIHF1ZXVlIGhhZCBhdCBsZWFzdCBvbmUg DQptZXNzYWdlLCBidXQgdGhlcmUgd2FzIG5vbmUgaW4gaXQuIA0KDQpJIHNl YXJjaGVkIHRoZSBhcmNoaXZlcyBvZiBwdGhyZWFkLXdpbjMyJ3MgZGlzY3Vz c2lvbiBsaXN0IGFuZCBnb3Qgbm9uZSByZXBvcnQgYWJvdXQgdGhpcyANCnBy b2JsZW0uIEkgaG9wZSBpdCBpcyBiZWNhdXNlIG9mIG15IG1pc3Rha2UgaW4g dGhlIHNvdXJjZSBjb2RlLCBidXQgSSBoYXZlIGNoZWNrZWQgaXQgbWFueSAN CnRpbWVzLiBEb2VzIGFueW9uZSBoYXZlIHN1Z2dlc3Rpb24/IFRoYW5rIHlv dSBmb3IgeW91ciBwYXRpZW5jZS4gOikNCg0KTXkgdGVzdCBlbnZpcm9tZW50 OiANCmhhcmR3YXJlOiBjcHUgLSBQNCAyLjhHSHogKiAyIG1lbWVvcnkgLSAx Rw0Kc29mdHdhcmU6IHdpbmRvd3MgeHAgcHJvZmVzc2lvbiwgVmlzdWFsIEMr KyA2LjAgDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KMjYztefX09PKvP6jrdDFwLXTytfU16jStQ==