From: SASADA Koichi Date: 2010-11-03T22:50:25+09:00 Subject: [ruby-dev:42522] Proposal: thread local freelist This is a multi-part message in MIME format. --------------020600000400040208010704 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit  ささだです。  オブジェクト管理に関する提案です。現在、オブジェクト管理のための freelist は、グローバルに 1 つですが、スレッドごとに持たせませんか。  現状での利点は、新しい RVALUE の確保がスレッドローカルになって、ちょっ とうれしーかなー、という感じです。オブジェクトのメモリ上のローカリティが 向上するかもしれない、それで、CPU のキャッシュの効率が上がるかもしれな いってくらいで、気分の問題です。newobj は、間接参照のコストが 1 つ増える くらいだから、あまり問題無いんじゃないかと思っています。 # 現在でも、Thread はパタパタ切り替わるわけではないので、 # それなりの locality はあると思われます。 # これは、その locality を陽に上げよう、という提案です。  本質的な利点は、この辺に対して並列にゴニョゴニョしよう、というときに、 freelist みたいなグローバルな構造があると非常にやりづらく、これを解消す るためです。昨日、VALUE_CACHE という部分を消しましたが、これは元々私が 作っていた 並列 Thread Ruby で、freelist へのロックの競合を排除するため に設けましたが、本当は今回提案したような仕組みを作りたかったのです(が、 面倒だったので、とりあえず VALUE_CACHE でお茶を濁した)。  実装としては、次のように考えています。 - slot ごとに freelist を持たせる - スレッドは slot 保持する - newobj のときは、 - 保持した slot から obj を取り出す - もし無ければ、別の確保されていない slot を確保する - 確保されていない slot がなければ GC する - GC のときは、各 Thread が保持していた slot を解放させる (そのため、ある slot が、ある Thread 専用になるわけではない)  とりあえず作った patch を添付しますが、なんか test-all で嫌な感じのエ ラーが出ているので、多分バグ入りです。lazy sweep にも対応出来てるんじゃ ないかと思います。多分。 -- // SASADA Koichi at atdot dot net --------------020600000400040208010704 Content-Type: text/plain; name="gc.tl.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="gc.tl.patch" SW5kZXg6IHZtX2NvcmUuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHZtX2NvcmUuaAkocmV2aXNp b24gMjk2NzUpDQorKysgdm1fY29yZS5oCSh3b3JraW5nIGNvcHkpDQpAQCAtNDUzLDYgKzQ1 Myw3IEBAIHR5cGVkZWYgc3RydWN0IHJiX3RocmVhZF9zdHJ1Y3Qgew0KICNlbmRpZg0KICAg ICBqbXBfYnVmIG1hY2hpbmVfcmVnczsNCiAgICAgaW50IG1hcmtfc3RhY2tfbGVuOw0KKyAg ICBzdHJ1Y3QgaGVhcHNfc2xvdCAqaGVhcF9zbG90Ow0KIA0KICAgICAvKiBzdGF0aXN0aWNz IGRhdGEgZm9yIHByb2ZpbGVyICovDQogICAgIFZBTFVFIHN0YXRfaW5zbl91c2FnZTsNCklu ZGV4OiBnYy5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2MuYwkocmV2aXNpb24gMjk2NzUpDQor KysgZ2MuYwkod29ya2luZyBjb3B5KQ0KQEAgLTI4Niw2ICsyODYsNyBAQCB0eXBlZGVmIHN0 cnVjdCBSVkFMVUUgew0KIHN0cnVjdCBoZWFwc19zbG90IHsNCiAgICAgdm9pZCAqbWVtYmFz ZTsNCiAgICAgUlZBTFVFICpzbG90Ow0KKyAgICBSVkFMVUUgKmZyZWVsaXN0Ow0KICAgICBz aXplX3QgbGltaXQ7DQogICAgIHN0cnVjdCBoZWFwc19zbG90ICpuZXh0Ow0KICAgICBzdHJ1 Y3QgaGVhcHNfc2xvdCAqcHJldjsNCkBAIC0zMjAsMTAgKzMyMSwxMCBAQCB0eXBlZGVmIHN0 cnVjdCByYl9vYmpzcGFjZSB7DQogCXNpemVfdCBpbmNyZW1lbnQ7DQogCXN0cnVjdCBoZWFw c19zbG90ICpwdHI7DQogCXN0cnVjdCBoZWFwc19zbG90ICpzd2VlcF9zbG90czsNCisJc3Ry dWN0IGhlYXBzX3Nsb3QgKnN3ZXB0X3Nsb3RzOw0KIAlzdHJ1Y3Qgc29ydGVkX2hlYXBzX3Ns b3QgKnNvcnRlZDsNCiAJc2l6ZV90IGxlbmd0aDsNCiAJc2l6ZV90IHVzZWQ7DQotCVJWQUxV RSAqZnJlZWxpc3Q7DQogCVJWQUxVRSAqcmFuZ2VbMl07DQogCVJWQUxVRSAqZnJlZWQ7DQog CXNpemVfdCBsaXZlX251bTsNCkBAIC0zNzEsNyArMzcyLDYgQEAgaW50ICpydWJ5X2luaXRp YWxfZ2Nfc3RyZXNzX3B0ciA9ICZyYl9vYg0KICNkZWZpbmUgaGVhcHMJCQlvYmpzcGFjZS0+ aGVhcC5wdHINCiAjZGVmaW5lIGhlYXBzX2xlbmd0aAkJb2Jqc3BhY2UtPmhlYXAubGVuZ3Ro DQogI2RlZmluZSBoZWFwc191c2VkCQlvYmpzcGFjZS0+aGVhcC51c2VkDQotI2RlZmluZSBm cmVlbGlzdAkJb2Jqc3BhY2UtPmhlYXAuZnJlZWxpc3QNCiAjZGVmaW5lIGxvbWVtCQkJb2Jq c3BhY2UtPmhlYXAucmFuZ2VbMF0NCiAjZGVmaW5lIGhpbWVtCQkJb2Jqc3BhY2UtPmhlYXAu cmFuZ2VbMV0NCiAjZGVmaW5lIGhlYXBzX2luYwkJb2Jqc3BhY2UtPmhlYXAuaW5jcmVtZW50 DQpAQCAtOTM1LDYgKzkzNSw3IEBAIGFzc2lnbl9oZWFwX3Nsb3QocmJfb2Jqc3BhY2VfdCAq b2Jqc3BhY2UNCiAgICAgc2xvdC0+bmV4dCA9IGhlYXBzOw0KICAgICBpZiAoaGVhcHMpIGhl YXBzLT5wcmV2ID0gc2xvdDsNCiAgICAgaGVhcHMgPSBzbG90Ow0KKyAgICBvYmpzcGFjZS0+ aGVhcC5zd2VwdF9zbG90cyA9IHNsb3Q7DQogDQogICAgIG1lbWJhc2UgPSBwOw0KICAgICBp ZiAoKFZBTFVFKXAgJSBzaXplb2YoUlZBTFVFKSAhPSAwKSB7DQpAQCAtOTc3LDggKzk3OCw4 IEBAIGFzc2lnbl9oZWFwX3Nsb3QocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UNCiANCiAgICAg d2hpbGUgKHAgPCBwZW5kKSB7DQogCXAtPmFzLmZyZWUuZmxhZ3MgPSAwOw0KLQlwLT5hcy5m cmVlLm5leHQgPSBmcmVlbGlzdDsNCi0JZnJlZWxpc3QgPSBwOw0KKwlwLT5hcy5mcmVlLm5l eHQgPSBzbG90LT5mcmVlbGlzdDsNCisJc2xvdC0+ZnJlZWxpc3QgPSBwOw0KIAlwKys7DQog ICAgIH0NCiB9DQpAQCAtMTA0MSwzNyArMTA0Miw1MiBAQCByYl9kdXJpbmdfZ2Modm9pZCkN CiAgICAgcmV0dXJuIGR1cmluZ19nYzsNCiB9DQogDQotI2RlZmluZSBSQU5ZKG8pICgoUlZB TFVFKikobykpDQorc3RhdGljIHN0cnVjdCBoZWFwc19zbG90ICoNCituZXh0X3N3ZXB0c2xv dChyYl9vYmpzcGFjZV90ICpvYmpzcGFjZSkNCit7DQorICAgIHN0cnVjdCBoZWFwc19zbG90 ICpzbG90ID0gb2Jqc3BhY2UtPmhlYXAuc3dlcHRfc2xvdHM7DQogDQotc3RhdGljIFZBTFVF DQotcmJfbmV3b2JqX2Zyb21faGVhcChyYl9vYmpzcGFjZV90ICpvYmpzcGFjZSkNCisgICAg d2hpbGUgKHNsb3QgJiYgc2xvdCAhPSBvYmpzcGFjZS0+aGVhcC5zd2VlcF9zbG90cykgew0K KwlpZiAoc2xvdC0+ZnJlZWxpc3QpIHsNCisJICAgIHJldHVybiBzbG90Ow0KKwl9DQorCXNs b3QgPSBvYmpzcGFjZS0+aGVhcC5zd2VwdF9zbG90cyA9IG9ianNwYWNlLT5oZWFwLnN3ZXB0 X3Nsb3RzLT5uZXh0Ow0KKyAgICB9DQorICAgIHJldHVybiAwOw0KK30NCisNCitzdGF0aWMg c3RydWN0IGhlYXBzX3Nsb3QgKg0KK2dldF9zd2VwdHNsb3QocmJfdGhyZWFkX3QgKnRoLCBy Yl9vYmpzcGFjZV90ICpvYmpzcGFjZSkNCiB7DQotICAgIFZBTFVFIG9iajsNCisgICAgc3Ry dWN0IGhlYXBzX3Nsb3QgKnNsb3QgPSB0aC0+aGVhcF9zbG90Ow0KKw0KKyAgICBpZiAoTElL RUxZKHNsb3QgIT0gMCkgJiYgTElLRUxZKHNsb3QtPmZyZWVsaXN0ICE9IDApKSB7DQorCXJl dHVybiBzbG90Ow0KKyAgICB9DQorDQorICAgIHdoaWxlICgxKSB7DQorCXNsb3QgPSBuZXh0 X3N3ZXB0c2xvdChvYmpzcGFjZSk7DQorDQorCWlmIChMSUtFTFkoc2xvdCAhPSAwKSAmJiBM SUtFTFkoc2xvdC0+ZnJlZWxpc3QgIT0gMCkpIHsNCisJICAgIHRoLT5oZWFwX3Nsb3QgPSBz bG90Ow0KKwkgICAgcmV0dXJuIHNsb3Q7DQorCX0NCiANCi0gICAgaWYgKChydWJ5X2djX3N0 cmVzcyAmJiAhcnVieV9kaXNhYmxlX2djX3N0cmVzcykgfHwgIWZyZWVsaXN0KSB7DQogCWlm ICghZ2NfbGF6eV9zd2VlcChvYmpzcGFjZSkpIHsNCiAJICAgIGR1cmluZ19nYyA9IDA7DQog CSAgICByYl9tZW1lcnJvcigpOw0KIAl9DQogICAgIH0NCi0NCi0gICAgb2JqID0gKFZBTFVF KWZyZWVsaXN0Ow0KLSAgICBmcmVlbGlzdCA9IGZyZWVsaXN0LT5hcy5mcmVlLm5leHQ7DQot DQotICAgIE1FTVpFUk8oKHZvaWQqKW9iaiwgUlZBTFVFLCAxKTsNCi0jaWZkZWYgR0NfREVC VUcNCi0gICAgUkFOWShvYmopLT5maWxlID0gcmJfc291cmNlZmlsZSgpOw0KLSAgICBSQU5Z KG9iaiktPmxpbmUgPSByYl9zb3VyY2VsaW5lKCk7DQotI2VuZGlmDQotICAgIEdDX1BST0Zf SU5DX0xJVkVfTlVNOw0KLQ0KLSAgICByZXR1cm4gb2JqOw0KIH0NCiANCisjZGVmaW5lIFJB TlkobykgKChSVkFMVUUqKShvKSkNCisNCiBWQUxVRQ0KIHJiX25ld29iaih2b2lkKQ0KIHsN CiAgICAgcmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UgPSAmcmJfb2Jqc3BhY2U7DQorICAgIFZB TFVFIG9iajsNCisgICAgc3RydWN0IGhlYXBzX3Nsb3QgKnNsb3Q7DQogDQogICAgIGlmIChk dXJpbmdfZ2MpIHsNCiAJZG9udF9nYyA9IDE7DQpAQCAtMTA3OSw3ICsxMDk1LDI2IEBAIHJi X25ld29iaih2b2lkKQ0KIAlyYl9idWcoIm9iamVjdCBhbGxvY2F0aW9uIGR1cmluZyBnYXJi YWdlIGNvbGxlY3Rpb24gcGhhc2UiKTsNCiAgICAgfQ0KIA0KLSAgICByZXR1cm4gcmJfbmV3 b2JqX2Zyb21faGVhcChvYmpzcGFjZSk7DQorICAgIGlmIChydWJ5X2djX3N0cmVzcyAmJiAh cnVieV9kaXNhYmxlX2djX3N0cmVzcykgew0KKwlpZiAoIWdhcmJhZ2VfY29sbGVjdChvYmpz cGFjZSkpIHsNCisJICAgIGR1cmluZ19nYyA9IDA7DQorCSAgICByYl9tZW1lcnJvcigpOw0K Kwl9DQorICAgIH0NCisNCisgICAgc2xvdCA9IGdldF9zd2VwdHNsb3QoR0VUX1RIUkVBRCgp LCBvYmpzcGFjZSk7DQorDQorICAgIG9iaiA9IChWQUxVRSlzbG90LT5mcmVlbGlzdDsNCisg ICAgc2xvdC0+ZnJlZWxpc3QgPSBzbG90LT5mcmVlbGlzdC0+YXMuZnJlZS5uZXh0Ow0KKw0K KyAgICBNRU1aRVJPKCh2b2lkKilvYmosIFJWQUxVRSwgMSk7DQorI2lmZGVmIEdDX0RFQlVH DQorICAgIFJBTlkob2JqKS0+ZmlsZSA9IHJiX3NvdXJjZWZpbGUoKTsNCisgICAgUkFOWShv YmopLT5saW5lID0gcmJfc291cmNlbGluZSgpOw0KKyNlbmRpZg0KKyAgICBHQ19QUk9GX0lO Q19MSVZFX05VTTsNCisNCisgICAgcmV0dXJuIG9iajsNCiB9DQogDQogTk9ERSoNCkBAIC0x ODEyLDEyICsxODQ3LDM2IEBAIGdjX21hcmtfY2hpbGRyZW4ocmJfb2Jqc3BhY2VfdCAqb2Jq c3BhY2UNCiBzdGF0aWMgaW50IG9ial9mcmVlKHJiX29ianNwYWNlX3QgKiwgVkFMVUUpOw0K IA0KIHN0YXRpYyBpbmxpbmUgdm9pZA0KLWFkZF9mcmVlbGlzdChyYl9vYmpzcGFjZV90ICpv YmpzcGFjZSwgUlZBTFVFICpwKQ0KK2FkZF9mcmVlbGlzdChzdHJ1Y3QgaGVhcHNfc2xvdCAq c2xvdCwgUlZBTFVFICpwKQ0KIHsNCiAgICAgVkFMR1JJTkRfTUFLRV9NRU1fVU5ERUZJTkVE KCh2b2lkKilwLCBzaXplb2YoUlZBTFVFKSk7DQogICAgIHAtPmFzLmZyZWUuZmxhZ3MgPSAw Ow0KLSAgICBwLT5hcy5mcmVlLm5leHQgPSBmcmVlbGlzdDsNCi0gICAgZnJlZWxpc3QgPSBw Ow0KKyAgICBwLT5hcy5mcmVlLm5leHQgPSBzbG90LT5mcmVlbGlzdDsNCisgICAgc2xvdC0+ ZnJlZWxpc3QgPSBwOw0KK30NCisNCitzdGF0aWMgc3RydWN0IGhlYXBzX3Nsb3QgKg0KK3Ns b3Rfb2Zfb2JqKHJiX29ianNwYWNlX3QgKm9ianNwYWNlLCB2b2lkICpwdHIpDQorew0KKyAg ICByZWdpc3RlciBSVkFMVUUgKnAgPSBSQU5ZKHB0cik7DQorICAgIHJlZ2lzdGVyIHN0cnVj dCBzb3J0ZWRfaGVhcHNfc2xvdCAqaGVhcDsNCisgICAgcmVnaXN0ZXIgc2l6ZV90IGhpLCBs bywgbWlkOw0KKw0KKyAgICBsbyA9IDA7DQorICAgIGhpID0gaGVhcHNfdXNlZDsNCisgICAg d2hpbGUgKGxvIDwgaGkpIHsNCisJbWlkID0gKGxvICsgaGkpIC8gMjsNCisJaGVhcCA9ICZv YmpzcGFjZS0+aGVhcC5zb3J0ZWRbbWlkXTsNCisJaWYgKGhlYXAtPnN0YXJ0IDw9IHApIHsN CisJICAgIGlmIChwIDwgaGVhcC0+ZW5kKQ0KKwkgICAgICByZXR1cm4gaGVhcC0+c2xvdDsN CisJICAgIGxvID0gbWlkICsgMTsNCisJfQ0KKwllbHNlIHsNCisJICAgIGhpID0gbWlkOw0K Kwl9DQorICAgIH0NCisgICAgcmJfYnVnKCJzbG90X29mX29iajogdW5yZWFjaGFibGUiKTsN CiB9DQogDQogc3RhdGljIHZvaWQNCkBAIC0xODMyLDcgKzE4OTEsOCBAQCBmaW5hbGl6ZV9s aXN0KHJiX29ianNwYWNlX3QgKm9ianNwYWNlLCBSDQogICAgICAgICAgICAgfQ0KICAgICAg ICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICBHQ19QUk9GX0RFQ19MSVZFX05VTTsN Ci0gICAgICAgICAgICAgICAgYWRkX2ZyZWVsaXN0KG9ianNwYWNlLCBwKTsNCisJCS8vIGFk ZF9mcmVlbGlzdChzbG90X29mX29iaihvYmpzcGFjZSwgcCksIHApOw0KKwkJUkFOWShwKS0+ YXMuZnJlZS5mbGFncyA9IDA7DQogICAgICAgICAgICAgfQ0KIAl9DQogCWVsc2Ugew0KQEAg LTE4NTQsMTEgKzE5MTQsMTIgQEAgdW5saW5rX2hlYXBfc2xvdChyYl9vYmpzcGFjZV90ICpv YmpzcGFjZQ0KICAgICAgICAgaGVhcHMgPSBzbG90LT5uZXh0Ow0KICAgICBpZiAob2Jqc3Bh Y2UtPmhlYXAuc3dlZXBfc2xvdHMgPT0gc2xvdCkNCiAgICAgICAgIG9ianNwYWNlLT5oZWFw LnN3ZWVwX3Nsb3RzID0gc2xvdC0+bmV4dDsNCisgICAgaWYgKG9ianNwYWNlLT5oZWFwLnN3 ZXB0X3Nsb3RzID09IHNsb3QpDQorICAgICAgICBvYmpzcGFjZS0+aGVhcC5zd2VwdF9zbG90 cyA9IHNsb3QtPm5leHQ7DQogICAgIHNsb3QtPnByZXYgPSBOVUxMOw0KICAgICBzbG90LT5u ZXh0ID0gTlVMTDsNCiB9DQogDQotDQogc3RhdGljIHZvaWQNCiBmcmVlX3VudXNlZF9oZWFw cyhyYl9vYmpzcGFjZV90ICpvYmpzcGFjZSkNCiB7DQpAQCAtMTg5OSw5ICsxOTYwLDEwIEBA IHNsb3Rfc3dlZXAocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UsIHN0cnUNCiB7DQogICAgIHNp emVfdCBmcmVlX251bSA9IDAsIGZpbmFsX251bSA9IDA7DQogICAgIFJWQUxVRSAqcCwgKnBl bmQ7DQotICAgIFJWQUxVRSAqZnJlZSA9IGZyZWVsaXN0LCAqZmluYWwgPSBkZWZlcnJlZF9m aW5hbF9saXN0Ow0KKyAgICBSVkFMVUUgKmZpbmFsID0gZGVmZXJyZWRfZmluYWxfbGlzdDsN CiAgICAgaW50IGRlZmVycmVkOw0KIA0KKyAgICBzd2VlcF9zbG90LT5mcmVlbGlzdCA9IDA7 DQogICAgIHAgPSBzd2VlcF9zbG90LT5zbG90OyBwZW5kID0gcCArIHN3ZWVwX3Nsb3QtPmxp bWl0Ow0KICAgICB3aGlsZSAocCA8IHBlbmQpIHsNCiAgICAgICAgIGlmICghKHAtPmFzLmJh c2ljLmZsYWdzICYgRkxfTUFSSykpIHsNCkBAIC0xOTE4LDcgKzE5ODAsNyBAQCBzbG90X3N3 ZWVwKHJiX29ianNwYWNlX3QgKm9ianNwYWNlLCBzdHJ1DQogICAgICAgICAgICAgICAgIGZp bmFsX251bSsrOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBlbHNlIHsNCi0gICAg ICAgICAgICAgICAgYWRkX2ZyZWVsaXN0KG9ianNwYWNlLCBwKTsNCisgICAgICAgICAgICAg ICAgYWRkX2ZyZWVsaXN0KHN3ZWVwX3Nsb3QsIHApOw0KICAgICAgICAgICAgICAgICBmcmVl X251bSsrOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCkBAIC0xOTQwLDIwICsyMDAy LDI1IEBAIHNsb3Rfc3dlZXAocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UsIHN0cnUNCiAgICAg ICAgICAgICBwcC0+YXMuZnJlZS5mbGFncyB8PSBGTF9TSU5HTEVUT047IC8qIGZyZWVpbmcg cGFnZSBtYXJrICovDQogICAgICAgICB9DQogICAgICAgICBzd2VlcF9zbG90LT5saW1pdCA9 IGZpbmFsX251bTsNCi0gICAgICAgIGZyZWVsaXN0ID0gZnJlZTsJLyogY2FuY2VsIHRoaXMg cGFnZSBmcm9tIGZyZWVsaXN0ICovDQorCXN3ZWVwX3Nsb3QtPmZyZWVsaXN0ID0gMDsNCiAg ICAgICAgIHVubGlua19oZWFwX3Nsb3Qob2Jqc3BhY2UsIHN3ZWVwX3Nsb3QpOw0KICAgICB9 DQogICAgIGVsc2Ugew0KICAgICAgICAgb2Jqc3BhY2UtPmhlYXAuZnJlZV9udW0gKz0gZnJl ZV9udW07DQogICAgIH0NCiAgICAgb2Jqc3BhY2UtPmhlYXAuZmluYWxfbnVtICs9IGZpbmFs X251bTsNCisNCisgICAgaWYgKGZpbmFsX251bSA+IDApIHsNCisJLyoga2ljayBmaW5hbGl6 ZXIgKi8NCisJUlVCWV9WTV9TRVRfRklOQUxJWkVSX0lOVEVSUlVQVChHRVRfVEhSRUFEKCkp Ow0KKyAgICB9DQogfQ0KIA0KIHN0YXRpYyBpbnQNCiByZWFkeV90b19nYyhyYl9vYmpzcGFj ZV90ICpvYmpzcGFjZSkNCiB7DQogICAgIGlmIChkb250X2djIHx8IGR1cmluZ19nYykgew0K LQlpZiAoIWZyZWVsaXN0KSB7DQorCWlmICghbmV4dF9zd2VwdHNsb3Qob2Jqc3BhY2UpKSB7 DQogICAgICAgICAgICAgaWYgKCFoZWFwc19pbmNyZW1lbnQob2Jqc3BhY2UpKSB7DQogICAg ICAgICAgICAgICAgIHNldF9oZWFwc19pbmNyZW1lbnQob2Jqc3BhY2UpOw0KICAgICAgICAg ICAgICAgICBoZWFwc19pbmNyZW1lbnQob2Jqc3BhY2UpOw0KQEAgLTE5NjcsNyArMjAzNCw3 IEBAIHJlYWR5X3RvX2djKHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQ0KIHN0YXRpYyB2b2lk DQogYmVmb3JlX2djX3N3ZWVwKHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQ0KIHsNCi0gICAg ZnJlZWxpc3QgPSAwOw0KKyAgICBvYmpzcGFjZS0+aGVhcC5zd2VwdF9zbG90cyA9IDA7DQog ICAgIG9ianNwYWNlLT5oZWFwLmRvX2hlYXBfZnJlZSA9IChzaXplX3QpKChoZWFwc191c2Vk ICogSEVBUF9PQkpfTElNSVQpICogMC42NSk7DQogICAgIG9ianNwYWNlLT5oZWFwLmZyZWVf bWluID0gKHNpemVfdCkoKGhlYXBzX3VzZWQgKiBIRUFQX09CSl9MSU1JVCkgICogMC4yKTsN CiAgICAgaWYgKG9ianNwYWNlLT5oZWFwLmZyZWVfbWluIDwgRlJFRV9NSU4pIHsNCkBAIC0x OTc1LDcgKzIwNDIsMTMgQEAgYmVmb3JlX2djX3N3ZWVwKHJiX29ianNwYWNlX3QgKm9ianNw YWNlKQ0KICAgICAgICAgb2Jqc3BhY2UtPmhlYXAuZnJlZV9taW4gPSBGUkVFX01JTjsNCiAg ICAgfQ0KICAgICBvYmpzcGFjZS0+aGVhcC5zd2VlcF9zbG90cyA9IGhlYXBzOw0KKyAgICBv YmpzcGFjZS0+aGVhcC5zd2VwdF9zbG90cyA9IGhlYXBzOw0KICAgICBvYmpzcGFjZS0+aGVh cC5mcmVlX251bSA9IDA7DQorDQorICAgIC8qIHN3ZWVwIHVubGlua2VkIG1ldGhvZCBlbnRy aWVzICovDQorICAgIGlmIChHRVRfVk0oKS0+dW5saW5rZWRfbWV0aG9kX2VudHJ5X2xpc3Qp IHsNCisJcmJfc3dlZXBfbWV0aG9kX2VudHJ5KEdFVF9WTSgpKTsNCisgICAgfQ0KIH0NCiAN CiBzdGF0aWMgdm9pZA0KQEAgLTE5OTUsMjAgKzIwNjgsOSBAQCBhZnRlcl9nY19zd2VlcChy Yl9vYmpzcGFjZV90ICpvYmpzcGFjZSkNCiAgICAgfQ0KICAgICBtYWxsb2NfaW5jcmVhc2Ug PSAwOw0KIA0KLSAgICBpZiAoZGVmZXJyZWRfZmluYWxfbGlzdCkgew0KLSAgICAgICAgLyog Y2xlYXIgZmluYWxpemF0aW9uIGxpc3QgKi8NCi0JUlVCWV9WTV9TRVRfRklOQUxJWkVSX0lO VEVSUlVQVChHRVRfVEhSRUFEKCkpOw0KLSAgICB9DQotICAgIGVsc2V7DQogCWZyZWVfdW51 c2VkX2hlYXBzKG9ianNwYWNlKTsNCiAgICAgfQ0KIA0KLSAgICAvKiBzd2VlcCB1bmxpbmtl ZCBtZXRob2QgZW50cmllcyAqLw0KLSAgICBpZiAodGgtPnZtLT51bmxpbmtlZF9tZXRob2Rf ZW50cnlfbGlzdCkgew0KLQlyYl9zd2VlcF9tZXRob2RfZW50cnkodGgtPnZtKTsNCi0gICAg fQ0KLX0NCi0NCiBzdGF0aWMgaW50DQogbGF6eV9zd2VlcChyYl9vYmpzcGFjZV90ICpvYmpz cGFjZSkNCiB7DQpAQCAtMjAxOSw3ICsyMDgxLDcgQEAgbGF6eV9zd2VlcChyYl9vYmpzcGFj ZV90ICpvYmpzcGFjZSkNCiAgICAgICAgIG5leHQgPSBvYmpzcGFjZS0+aGVhcC5zd2VlcF9z bG90cy0+bmV4dDsNCiAJc2xvdF9zd2VlcChvYmpzcGFjZSwgb2Jqc3BhY2UtPmhlYXAuc3dl ZXBfc2xvdHMpOw0KICAgICAgICAgb2Jqc3BhY2UtPmhlYXAuc3dlZXBfc2xvdHMgPSBuZXh0 Ow0KLSAgICAgICAgaWYgKGZyZWVsaXN0KSB7DQorICAgICAgICBpZiAobmV4dF9zd2VwdHNs b3Qob2Jqc3BhY2UpKSB7DQogICAgICAgICAgICAgZHVyaW5nX2djID0gMDsNCiAgICAgICAg ICAgICByZXR1cm4gVFJVRTsNCiAgICAgICAgIH0NCkBAIC0yMDc3LDcgKzIxMzksNyBAQCBn Y19sYXp5X3N3ZWVwKHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQ0KICAgICBHQ19QUk9GX1NX RUVQX1RJTUVSX1NUQVJUOw0KICAgICBpZighKHJlcyA9IGxhenlfc3dlZXAob2Jqc3BhY2Up KSkgew0KICAgICAgICAgYWZ0ZXJfZ2Nfc3dlZXAob2Jqc3BhY2UpOw0KLSAgICAgICAgaWYo ZnJlZWxpc3QpIHsNCisgICAgICAgIGlmKG5leHRfc3dlcHRzbG90KG9ianNwYWNlKSkgew0K ICAgICAgICAgICAgIHJlcyA9IFRSVUU7DQogICAgICAgICAgICAgZHVyaW5nX2djID0gMDsN CiAgICAgICAgIH0NCkBAIC0yMTE1LDcgKzIxNzcsOCBAQCByYl9nY19mb3JjZV9yZWN5Y2xl KFZBTFVFIHApDQogICAgICAgICBSQU5ZKHApLT5hcy5mcmVlLmZsYWdzID0gMDsNCiAgICAg fQ0KICAgICBlbHNlIHsNCi0gICAgICAgIGFkZF9mcmVlbGlzdChvYmpzcGFjZSwgKFJWQUxV RSAqKXApOw0KKyAgICAgICAgLy8gYWRkX2ZyZWVsaXN0KHNsb3Rfb2Zfb2JqKG9ianNwYWNl LCAodm9pZCAqKXApLCAoUlZBTFVFICopcCk7DQorCVJBTlkocCktPmFzLmZyZWUuZmxhZ3Mg PSAwOw0KICAgICB9DQogfQ0KIA0KQEAgLTI3ODUsMjAgKzI4NDgsMTcgQEAgcnVuX3Npbmds ZV9maW5hbChWQUxVRSBhcmcpDQogfQ0KIA0KIHN0YXRpYyB2b2lkDQotcnVuX2ZpbmFsaXpl cihyYl9vYmpzcGFjZV90ICpvYmpzcGFjZSwgVkFMVUUgb2JqLCBWQUxVRSBvYmppZCwgVkFM VUUgdGFibGUpDQorcnVuX2ZpbmFsaXplcihyYl9vYmpzcGFjZV90ICpvYmpzcGFjZSwgVkFM VUUgb2JqaWQsIFZBTFVFIHRhYmxlKQ0KIHsNCiAgICAgbG9uZyBpOw0KICAgICBpbnQgc3Rh dHVzOw0KICAgICBWQUxVRSBhcmdzWzNdOw0KKyAgICBWQUxVRSBvYmppZF9hcnkgPSByYl9v YmpfZnJlZXplKHJiX2FyeV9uZXczKDEsIG9iamlkKSk7DQogDQotICAgIGFyZ3NbMV0gPSAw Ow0KLSAgICBhcmdzWzJdID0gKFZBTFVFKXJiX3NhZmVfbGV2ZWwoKTsNCi0gICAgaWYgKCFh cmdzWzFdICYmIFJBUlJBWV9MRU4odGFibGUpID4gMCkgew0KLQlhcmdzWzFdID0gcmJfb2Jq X2ZyZWV6ZShyYl9hcnlfbmV3MygxLCBvYmppZCkpOw0KLSAgICB9DQogICAgIGZvciAoaT0w OyBpPFJBUlJBWV9MRU4odGFibGUpOyBpKyspIHsNCiAJVkFMVUUgZmluYWwgPSBSQVJSQVlf UFRSKHRhYmxlKVtpXTsNCiAJYXJnc1swXSA9IFJBUlJBWV9QVFIoZmluYWwpWzFdOw0KKwlh cmdzWzFdID0gb2JqaWRfYXJ5Ow0KIAlhcmdzWzJdID0gRklYMklOVChSQVJSQVlfUFRSKGZp bmFsKVswXSk7DQogCXJiX3Byb3RlY3QocnVuX3NpbmdsZV9maW5hbCwgKFZBTFVFKWFyZ3Ms ICZzdGF0dXMpOw0KICAgICB9DQpAQCAtMjgyOCw3ICsyODg4LDcgQEAgcnVuX2ZpbmFsKHJi X29ianNwYWNlX3QgKm9ianNwYWNlLCBWQUxVRQ0KIA0KICAgICBrZXkgPSAoc3RfZGF0YV90 KW9iajsNCiAgICAgaWYgKHN0X2RlbGV0ZShmaW5hbGl6ZXJfdGFibGUsICZrZXksICZ0YWJs ZSkpIHsNCi0JcnVuX2ZpbmFsaXplcihvYmpzcGFjZSwgb2JqLCBvYmppZCwgKFZBTFVFKXRh YmxlKTsNCisJcnVuX2ZpbmFsaXplcihvYmpzcGFjZSwgb2JqaWQsIChWQUxVRSl0YWJsZSk7 DQogICAgIH0NCiB9DQogDQpAQCAtMjg0MywxNyArMjkwMywxMCBAQCBmaW5hbGl6ZV9kZWZl cnJlZChyYl9vYmpzcGFjZV90ICpvYmpzcGFjDQogICAgIH0NCiB9DQogDQotc3RhdGljIHZv aWQNCi1nY19maW5hbGl6ZV9kZWZlcnJlZChyYl9vYmpzcGFjZV90ICpvYmpzcGFjZSkNCi17 DQotICAgIGZpbmFsaXplX2RlZmVycmVkKG9ianNwYWNlKTsNCi0gICAgZnJlZV91bnVzZWRf aGVhcHMob2Jqc3BhY2UpOw0KLX0NCi0NCiB2b2lkDQogcmJfZ2NfZmluYWxpemVfZGVmZXJy ZWQodm9pZCkNCiB7DQotICAgIGdjX2ZpbmFsaXplX2RlZmVycmVkKCZyYl9vYmpzcGFjZSk7 DQorICAgIGZpbmFsaXplX2RlZmVycmVkKCZyYl9vYmpzcGFjZSk7DQogfQ0KIA0KIHN0YXRp YyBpbnQNCkBAIC0yOTE5LDcgKzI5NzIsNyBAQCByYl9vYmpzcGFjZV9jYWxsX2ZpbmFsaXpl cihyYl9vYmpzcGFjZV90DQogCXN0X2ZvcmVhY2goZmluYWxpemVyX3RhYmxlLCBmb3JjZV9j aGFpbl9vYmplY3QsIChzdF9kYXRhX3QpJmxpc3QpOw0KIAl3aGlsZSAobGlzdCkgew0KIAkg ICAgc3RydWN0IGZvcmNlX2ZpbmFsaXplX2xpc3QgKmN1cnIgPSBsaXN0Ow0KLQkgICAgcnVu X2ZpbmFsaXplcihvYmpzcGFjZSwgY3Vyci0+b2JqLCByYl9vYmpfaWQoY3Vyci0+b2JqKSwg Y3Vyci0+dGFibGUpOw0KKwkgICAgcnVuX2ZpbmFsaXplcihvYmpzcGFjZSwgcmJfb2JqX2lk KGN1cnItPm9iaiksIGN1cnItPnRhYmxlKTsNCiAJICAgIHN0X2RlbGV0ZShmaW5hbGl6ZXJf dGFibGUsIChzdF9kYXRhX3QqKSZjdXJyLT5vYmosIDApOw0KIAkgICAgbGlzdCA9IGN1cnIt Pm5leHQ7DQogCSAgICB4ZnJlZShjdXJyKTsNCkBAIC0yOTczLDcgKzMwMjYsOCBAQCByYl9n Yyh2b2lkKQ0KIHsNCiAgICAgcmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UgPSAmcmJfb2Jqc3Bh Y2U7DQogICAgIGdhcmJhZ2VfY29sbGVjdChvYmpzcGFjZSk7DQotICAgIGdjX2ZpbmFsaXpl X2RlZmVycmVkKG9ianNwYWNlKTsNCisgICAgZmluYWxpemVfZGVmZXJyZWQob2Jqc3BhY2Up Ow0KKyAgICBmcmVlX3VudXNlZF9oZWFwcyhvYmpzcGFjZSk7DQogfQ0KIA0KIC8qDQpJbmRl eDogdm0uYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHZtLmMJKHJldmlzaW9uIDI5Njc1KQ0KKysr IHZtLmMJKHdvcmtpbmcgY29weSkNCkBAIC0xNjgwLDYgKzE2ODAsOCBAQCByYl90aHJlYWRf bWFyayh2b2lkICpwdHIpDQogCX0NCiANCiAJbWFya19ldmVudF9ob29rcyh0aC0+ZXZlbnRf aG9va3MpOw0KKw0KKwl0aC0+aGVhcF9zbG90ID0gMDsNCiAgICAgfQ0KIA0KICAgICBSVUJZ X01BUktfTEVBVkUoInRocmVhZCIpOw0K --------------020600000400040208010704--