From: authorNari Date: 2008-05-21T11:10:11+09:00 Subject: [ruby-dev:34784] Re: Improvement of lazy sweep patch ------=_Part_10476_24774291.1211335812871 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Content-Disposition: inline authorNariです。 バグが取れてRVALUEのフィールドを削る事ができました。 修正版を添付します。 バグだと思われていた箇所は私のコードによるものでした。。。 2008/05/20 16:50 authorNari : > authorNariです。 > >> ざっとみたところRVALUEにフィールドが追加されているのだけが残 >> 念ですね。たった1バイトですが、アラインメントの関係でおそら >> く1オブジェクトあたり4バイトはメモリ消費が増えるでしょう。 > > これは本当は必要ないはずなので消したいのですが、 > FL_MARKを使ってflagにMARKを付けておくと、どこかのタイミングで > MARKが消されてしまって、そのslotをsweepする際に生きているObjectが消されてしまう > バグが発生しました。 > それを回避するためにRVALUEにフィールドを追加しています。 > (この前のパッチも同じ理由でフィールドが追加されています) > > 本当は消せるはずですし、僕も消したくてたまりませんので > 頑張ってみます。 > > 2008/05/20 14:48 Yukihiro Matsumoto : >> まつもと ゆきひろです >> >> In message "Re: [ruby-dev:34768] Improvement of lazy sweep patch" >> on Tue, 20 May 2008 13:23:16 +0900, authorNari writes: >> >> |前に作成していたLazySweepを、現在のHeap構造に合うように修正しました。 >> |といってもほぼ書き直してしまいましたが。 >> | >> |性能は手持ちのベンチマークでためした所、さほど変化はありませんでした。 >> |http://d.hatena.ne.jp/authorNari/20080520/1211251926 >> >> すばらしい。 >> >> ざっとみたところRVALUEにフィールドが追加されているのだけが残 >> 念ですね。たった1バイトですが、アラインメントの関係でおそら >> く1オブジェクトあたり4バイトはメモリ消費が増えるでしょう。 >> >> こちらでもいろいろ試してみます。 >> >> > > --- > nari > > --- nari ------=_Part_10476_24774291.1211335812871 Content-Type: text/x-patch; name=rb_gc_lazy_sweep_r_16491.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_fgh9z3if0 Content-Disposition: attachment; filename=rb_gc_lazy_sweep_r_16491.diff SW5kZXg6IGdjLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2MuYwkoGyRCJWolUyU4JWclcxsoQiAxNjQ5MSkK KysrIGdjLmMJKBskQjpuNkglMyVUITwbKEIpCkBAIC05MSw2ICs5MSw5IEBACiBpbnQgcnVieV9n Y19kZWJ1Z19pbmRlbnQgPSAwOwogCiAjdW5kZWYgR0NfREVCVUcKKyNpZm5kZWYgR0NfTk9USUZZ CisjZGVmaW5lIEdDX05PVElGWSAwCisjZW5kaWYKIAogI2lmIGRlZmluZWQoX01TQ19WRVIpIHx8 IGRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCiAjcHJhZ21hIHBh Y2socHVzaCwgMSkgLyogbWFnaWMgZm9yIHJlZHVjaW5nIHNpemVvZihSVkFMVUUpOiAyNCAtPiAy MCAqLwpAQCAtMTI5LDE0ICsxMzIsMjAgQEAKICNwcmFnbWEgcGFjayhwb3ApCiAjZW5kaWYKIAor ZW51bSBzbG90X2NvbG9yIHsKKyAgICBXSElURSA9IDB4MDAsICAvKiBnYXJiYWdlICovCisgICAg QkxBQ0sgPSAweDAxLCAgLyogdXNlZCAqLworICAgIEdSQVkgID0gMHgwMiwgIC8qIG5vdCBzd2Vl cCAqLworfTsKKyAKIHN0cnVjdCBoZWFwc19zbG90IHsKICAgICB2b2lkICptZW1iYXNlOwogICAg IFJWQUxVRSAqc2xvdDsKICAgICBpbnQgbGltaXQ7CisgICAgZW51bSBzbG90X2NvbG9yIGNvbG9y OwogfTsKIAogI2RlZmluZSBIRUFQX01JTl9TTE9UUyAxMDAwMAotI2RlZmluZSBGUkVFX01JTiAg NDA5NgogCiBzdHJ1Y3QgZ2NfbGlzdCB7CiAgICAgVkFMVUUgKnZhcnB0cjsKQEAgLTE1NiwxMCAr MTY1LDE2IEBACiAJUlZBTFVFICpmcmVlbGlzdDsKIAlSVkFMVUUgKnJhbmdlWzJdOwogCVJWQUxV RSAqZnJlZWQ7CisJc2l6ZV90IGxpdmU7CisJc2l6ZV90IGRlYWQ7CisJc2l6ZV90IGRvX2hlYXBf ZnJlZTsKKwlzaXplX3Qgc3dlZXBfaW5kZXg7CisJc2l6ZV90IHN3ZWVwX2luY3JlbWVudDsKICAg ICB9IGhlYXA7CiAgICAgc3RydWN0IHsKIAlpbnQgZG9udF9nYzsKIAlpbnQgZHVyaW5nX2djOwor CWludCBkdXJpbmdfc3dlZXA7CiAgICAgfSBmbGFnczsKICAgICBzdHJ1Y3QgewogCWludCBuZWVk X2NhbGw7CkBAIC0xOTEsOCArMjA2LDE0IEBACiAjZGVmaW5lIGhpbWVtCQkJb2Jqc3BhY2UtPmhl YXAucmFuZ2VbMV0KICNkZWZpbmUgaGVhcHNfaW5jCQlvYmpzcGFjZS0+aGVhcC5pbmNyZW1lbnQK ICNkZWZpbmUgaGVhcHNfZnJlZWQJCW9ianNwYWNlLT5oZWFwLmZyZWVkCisjZGVmaW5lIGxpdmUJ CQlvYmpzcGFjZS0+aGVhcC5saXZlCisjZGVmaW5lIGRlYWQJCQlvYmpzcGFjZS0+aGVhcC5kZWFk CisjZGVmaW5lIGRvX2hlYXBfZnJlZQkJb2Jqc3BhY2UtPmhlYXAuZG9faGVhcF9mcmVlCisjZGVm aW5lIGhlYXBzX3N3ZWVwX2luZGV4CW9ianNwYWNlLT5oZWFwLnN3ZWVwX2luZGV4CisjZGVmaW5l IGhlYXBzX3N3ZWVwX2luYyAJb2Jqc3BhY2UtPmhlYXAuc3dlZXBfaW5jcmVtZW50CiAjZGVmaW5l IGRvbnRfZ2MgCQlvYmpzcGFjZS0+ZmxhZ3MuZG9udF9nYwogI2RlZmluZSBkdXJpbmdfZ2MJCW9i anNwYWNlLT5mbGFncy5kdXJpbmdfZ2MKKyNkZWZpbmUgZHVyaW5nX3N3ZWVwCQlvYmpzcGFjZS0+ ZmxhZ3MuZHVyaW5nX3N3ZWVwCiAjZGVmaW5lIG5lZWRfY2FsbF9maW5hbCAJb2Jqc3BhY2UtPmZp bmFsLm5lZWRfY2FsbAogI2RlZmluZSBmaW5hbGl6ZXJfdGFibGUgCW9ianNwYWNlLT5maW5hbC50 YWJsZQogI2RlZmluZSBkZWZlcnJlZF9maW5hbF9saXN0CW9ianNwYWNlLT5maW5hbC5kZWZlcnJl ZApAQCAtMjUyLDYgKzI3Myw3IEBACiAKIHN0YXRpYyB2b2lkIHJ1bl9maW5hbChyYl9vYmpzcGFj ZV90ICpvYmpzcGFjZSwgVkFMVUUgb2JqKTsKIHN0YXRpYyBpbnQgZ2FyYmFnZV9jb2xsZWN0KHJi X29ianNwYWNlX3QgKm9ianNwYWNlKTsKK3N0YXRpYyBpbnQgZ2FyYmFnZV9jb2xsZWN0X2ZvcmNl KHJiX29ianNwYWNlX3QgKm9ianNwYWNlKTsKIAogdm9pZAogcmJfZ2xvYmFsX3ZhcmlhYmxlKFZB TFVFICp2YXIpCkBAIC0zMTYsMTEgKzMzOCwxMSBAQAogICAgIGlmIChzaXplID09IDApIHNpemUg PSAxOwogCiAgICAgaWYgKHJ1YnlfZ2Nfc3RyZXNzIHx8IChtYWxsb2NfaW5jcmVhc2Urc2l6ZSkg PiBtYWxsb2NfbGltaXQpIHsKLQlnYXJiYWdlX2NvbGxlY3Qob2Jqc3BhY2UpOworCWdhcmJhZ2Vf Y29sbGVjdF9mb3JjZShvYmpzcGFjZSk7CiAgICAgfQogICAgIFJVQllfQ1JJVElDQUwobWVtID0g bWFsbG9jKHNpemUpKTsKICAgICBpZiAoIW1lbSkgewotCWlmIChnYXJiYWdlX2NvbGxlY3Qob2Jq c3BhY2UpKSB7CisJaWYgKGdhcmJhZ2VfY29sbGVjdF9mb3JjZShvYmpzcGFjZSkpIHsKIAkgICAg UlVCWV9DUklUSUNBTChtZW0gPSBtYWxsb2Moc2l6ZSkpOwogCX0KIAlpZiAoIW1lbSkgewpAQCAt MzgxLDEwICs0MDMsMTAgQEAKICAgICB9CiAgICAgaWYgKCFwdHIpIHJldHVybiBydWJ5X3htYWxs b2Moc2l6ZSk7CiAgICAgaWYgKHNpemUgPT0gMCkgc2l6ZSA9IDE7Ci0gICAgaWYgKHJ1YnlfZ2Nf c3RyZXNzKSBnYXJiYWdlX2NvbGxlY3Qob2Jqc3BhY2UpOworICAgIGlmIChydWJ5X2djX3N0cmVz cykgZ2FyYmFnZV9jb2xsZWN0X2ZvcmNlKG9ianNwYWNlKTsKICAgICBSVUJZX0NSSVRJQ0FMKG1l bSA9IHJlYWxsb2MocHRyLCBzaXplKSk7CiAgICAgaWYgKCFtZW0pIHsKLQlpZiAoZ2FyYmFnZV9j b2xsZWN0KG9ianNwYWNlKSkgeworCWlmIChnYXJiYWdlX2NvbGxlY3RfZm9yY2Uob2Jqc3BhY2Up KSB7CiAJICAgIFJVQllfQ1JJVElDQUwobWVtID0gcmVhbGxvYyhwdHIsIHNpemUpKTsKIAl9CiAJ aWYgKCFtZW0pIHsKQEAgLTUzNiw2ICs1NTgsOCBAQAogICAgIGhlYXBzX2xlbmd0aCA9IG5leHRf aGVhcHNfbGVuZ3RoOwogfQogCisjZGVmaW5lIFJBTlkobykgKChSVkFMVUUqKShvKSkKKwogc3Rh dGljIHZvaWQKIGFzc2lnbl9oZWFwX3Nsb3QocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCiB7CkBA IC01NzAsNyArNTk0LDggQEAKIAkgICAgaGkgPSBtaWQ7CiAJfQogCWVsc2UgewotCSAgICByYl9i dWcoInNhbWUgaGVhcCBzbG90IGlzIGFsbG9jYXRlZDogJXAgYXQgJSJQUkl1VkFMVUUsIG1lbWJh c2UsIChWQUxVRSltaWQpOworCSAgICByYl9idWcoInNhbWUgaGVhcCBzbG90IGlzIGFsbG9jYXRl ZDogJXAsICVwIGF0ICUiUFJJdVZBTFVFLAorCQkgICBtZW1iYXNlLCBtaWRfbWVtYmFzZSwgKFZB TFVFKW1pZCk7CiAJfQogICAgIH0KICAgICBpZiAoaGkgPCBoZWFwc191c2VkKSB7CkBAIC01Nzks NiArNjA0LDcgQEAKICAgICBoZWFwc1toaV0ubWVtYmFzZSA9IG1lbWJhc2U7CiAgICAgaGVhcHNb aGldLnNsb3QgPSBwOwogICAgIGhlYXBzW2hpXS5saW1pdCA9IG9ianM7CisgICAgaGVhcHNbaGld LmNvbG9yID0gQkxBQ0s7CiAgICAgcGVuZCA9IHAgKyBvYmpzOwogICAgIGlmIChsb21lbSA9PSAw IHx8IGxvbWVtID4gcCkgbG9tZW0gPSBwOwogICAgIGlmIChoaW1lbSA8IHBlbmQpIGhpbWVtID0g cGVuZDsKQEAgLTU5MCw2ICs2MTYsOSBAQAogCWZyZWVsaXN0ID0gcDsKIAlwKys7CiAgICAgfQor ICAgIGlmIChoaSA8IGhlYXBzX3N3ZWVwX2luZGV4KSB7CisJaGVhcHNfc3dlZXBfaW5kZXgrKzsK KyAgICB9CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC02MzIsMTUgKzY2MSwxMyBAQAogICAgIHJldHVy biBRZmFsc2U7CiB9CiAKLSNkZWZpbmUgUkFOWShvKSAoKFJWQUxVRSopKG8pKQotCiBzdGF0aWMg VkFMVUUKIHJiX25ld29ial9mcm9tX2hlYXAocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCiB7CiAg ICAgVkFMVUUgb2JqOwogCQogICAgIGlmIChydWJ5X2djX3N0cmVzcyB8fCAhZnJlZWxpc3QpIHsK LSAgICAJaWYgKCFoZWFwc19pbmNyZW1lbnQob2Jqc3BhY2UpICYmICFnYXJiYWdlX2NvbGxlY3Qo b2Jqc3BhY2UpKSB7CisgICAJaWYgKCFnYXJiYWdlX2NvbGxlY3Qob2Jqc3BhY2UpKSB7CiAJICAg IHJiX21lbWVycm9yKCk7CiAJfQogICAgIH0KQEAgLTEwMDcsNiArMTAzNCw3IEBACiAgICAgaWYg KG9iai0+YXMuYmFzaWMuZmxhZ3MgPT0gMCkgcmV0dXJuOyAgICAgICAvKiBmcmVlIGNlbGwgKi8K ICAgICBpZiAob2JqLT5hcy5iYXNpYy5mbGFncyAmIEZMX01BUkspIHJldHVybjsgIC8qIGFscmVh ZHkgbWFya2VkICovCiAgICAgb2JqLT5hcy5iYXNpYy5mbGFncyB8PSBGTF9NQVJLOworICAgIGxp dmUrKzsKIAogICAgIGlmIChsZXYgPiBHQ19MRVZFTF9NQVggfHwgKGxldiA9PSAwICYmIHJ1Ynlf c3RhY2tfY2hlY2soKSkpIHsKIAlpZiAoIW1hcmtfc3RhY2tfb3ZlcmZsb3cpIHsKQEAgLTEwNDIs NiArMTA3MCw3IEBACiAgICAgaWYgKG9iai0+YXMuYmFzaWMuZmxhZ3MgPT0gMCkgcmV0dXJuOyAg ICAgICAvKiBmcmVlIGNlbGwgKi8KICAgICBpZiAob2JqLT5hcy5iYXNpYy5mbGFncyAmIEZMX01B UkspIHJldHVybjsgIC8qIGFscmVhZHkgbWFya2VkICovCiAgICAgb2JqLT5hcy5iYXNpYy5mbGFn cyB8PSBGTF9NQVJLOworICAgIGxpdmUrKzsKIAogICBtYXJraW5nOgogICAgIGlmIChGTF9URVNU KG9iaiwgRkxfRVhJVkFSKSkgewpAQCAtMTMwNSwxMzQgKzEzMzQsMTEyIEBACiAgICAgfQogfQog Ci1zdGF0aWMgdm9pZAotZnJlZV91bnVzZWRfaGVhcHMocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2Up Cit2b2lkIHJiX2djX2Fib3J0X3RocmVhZHModm9pZCk7CisKK3N0YXRpYyBpbnQKK3Nsb3Rfc3dl ZXAocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UsIHN0cnVjdCBoZWFwc19zbG90ICp0YXJnZXQpCiB7 Ci0gICAgc2l6ZV90IGksIGo7Ci0gICAgUlZBTFVFICpsYXN0ID0gMDsKKyAgICBSVkFMVUUgKnAs ICpwZW5kLCAqZnJlZTsKKyAgICBSVkFMVUUgKmZpbmFsOworICAgIGludCBmcmVlZCA9IDA7CiAK LSAgICBmb3IgKGkgPSBqID0gMTsgaiA8IGhlYXBzX3VzZWQ7IGkrKykgewotCWlmIChoZWFwc1tp XS5saW1pdCA9PSAwKSB7Ci0JICAgIGlmICghbGFzdCkgewotCQlsYXN0ID0gaGVhcHNbaV0ubWVt YmFzZTsKKyAgICBpZiAodGFyZ2V0LT5jb2xvciA9PSBCTEFDSyB8fCB0YXJnZXQtPmNvbG9yID09 IFdISVRFKSB7CisJcmV0dXJuIFFmYWxzZTsKKyAgICB9CisKKyAgICBmaW5hbCA9IGRlZmVycmVk X2ZpbmFsX2xpc3Q7CisgICAgZnJlZSA9IGZyZWVsaXN0OworICAgIHAgPSB0YXJnZXQtPnNsb3Q7 IHBlbmQgPSBwICsgdGFyZ2V0LT5saW1pdDsKKyAgICB3aGlsZSAocCA8IHBlbmQpIHsKKwlpZiAo IShwLT5hcy5iYXNpYy5mbGFncyAmIEZMX01BUkspKSB7CisJICAgIGlmIChwLT5hcy5iYXNpYy5m bGFncykgeworCQlvYmpfZnJlZShvYmpzcGFjZSwgKFZBTFVFKXApOwogCSAgICB9CisJICAgIGlm IChuZWVkX2NhbGxfZmluYWwgJiYgRkxfVEVTVChwLCBGTF9GSU5BTElaRSkpIHsKKwkJcC0+YXMu ZnJlZS5mbGFncyA9IEZMX01BUks7IC8qIHJlbWFpbiBtYXJrZWQgKi8KKwkJcC0+YXMuZnJlZS5u ZXh0ID0gZGVmZXJyZWRfZmluYWxfbGlzdDsKKwkJZGVmZXJyZWRfZmluYWxfbGlzdCA9IHA7CisJ ICAgIH0KIAkgICAgZWxzZSB7Ci0JCWZyZWUoaGVhcHNbaV0ubWVtYmFzZSk7CisJCVZBTEdSSU5E X01BS0VfTUVNX1VOREVGSU5FRCgodm9pZCopcCwgc2l6ZW9mKFJWQUxVRSkpOworCQlwLT5hcy5m cmVlLmZsYWdzID0gMDsKKwkJcC0+YXMuZnJlZS5uZXh0ID0gZnJlZWxpc3Q7CisJCWZyZWVsaXN0 ID0gcDsKIAkgICAgfQotCSAgICBoZWFwc191c2VkLS07CisJICAgIGZyZWVkKys7CiAJfQorCWVs c2UgaWYgKFJCQVNJQyhwKS0+ZmxhZ3MgPT0gRkxfTUFSSykgeworCSAgICAvKiBvYmplY3RzIHRv IGJlIGZpbmFsaXplZCAqLworCSAgICAvKiBkbyBub3RoaW5nIHJlbWFpbiBtYXJrZWQgKi8KKwl9 CiAJZWxzZSB7Ci0JICAgIGlmIChpICE9IGopIHsKLQkJaGVhcHNbal0gPSBoZWFwc1tpXTsKLQkg ICAgfQotCSAgICBqKys7CisJICAgIHAtPmFzLmJhc2ljLmZsYWdzICY9IH5GTF9NQVJLOworCSAg ICBkZWFkICs9IGZyZWVkOwogCX0KKwlwKys7CiAgICAgfQotICAgIGlmIChsYXN0KSB7Ci0JaWYg KGxhc3QgPCBoZWFwc19mcmVlZCkgewotCSAgICBmcmVlKGhlYXBzX2ZyZWVkKTsKLQkgICAgaGVh cHNfZnJlZWQgPSBsYXN0OworICAgIGlmIChmcmVlZCA9PSB0YXJnZXQtPmxpbWl0ICYmIGRlYWQg PiBkb19oZWFwX2ZyZWUpIHsKKwlSVkFMVUUgKnBwOworCQorCXRhcmdldC0+bGltaXQgPSAwOwor CXRhcmdldC0+Y29sb3IgPSBXSElURTsKKwlmb3IgKHBwID0gZGVmZXJyZWRfZmluYWxfbGlzdDsg cHAgIT0gZmluYWw7IHBwID0gcHAtPmFzLmZyZWUubmV4dCkgeworCSAgICBwcC0+YXMuZnJlZS5m bGFncyB8PSBGTF9TSU5HTEVUT047IC8qIGZyZWVpbmcgcGFnZSBtYXJrICovCiAJfQotCWVsc2Ug ewotCSAgICBmcmVlKGxhc3QpOworCWZyZWVsaXN0ID0gZnJlZTsJLyogY2FuY2VsIHRoaXMgcGFn ZSBmcm9tIGZyZWVsaXN0ICovCisgICAgfQorICAgIGVsc2UgeworCXRhcmdldC0+Y29sb3IgPSBC TEFDSzsKKyAgICB9CisgICAgcmV0dXJuIFF0cnVlOworfQorCitzdGF0aWMgdm9pZAoraGVhcF9z d2VlcF9pbmNyZW1lbnQocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UpCit7CisgICAgaW50IGkgPSAw OworCisgICAgd2hpbGUgKGkgPCBoZWFwc19zd2VlcF9pbmMgJiYgaGVhcHNfc3dlZXBfaW5kZXgg PCBoZWFwc191c2VkKSB7CisJaWYgKHNsb3Rfc3dlZXAob2Jqc3BhY2UsICZoZWFwc1toZWFwc19z d2VlcF9pbmRleF0pKSB7CisJICAgIGkrKzsKIAl9CisJaGVhcHNfc3dlZXBfaW5kZXgrKzsKICAg ICB9CiB9CiAKLXZvaWQgcmJfZ2NfYWJvcnRfdGhyZWFkcyh2b2lkKTsKLQogc3RhdGljIHZvaWQK LWdjX3N3ZWVwKHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQoraGVhcF9zd2VlcChyYl9vYmpzcGFj ZV90ICpvYmpzcGFjZSkKIHsKLSAgICBSVkFMVUUgKnAsICpwZW5kLCAqZmluYWxfbGlzdDsKLSAg ICBzaXplX3QgZnJlZWQgPSAwOwotICAgIHNpemVfdCBpOwotICAgIHNpemVfdCBsaXZlID0gMCwg ZnJlZV9taW4gPSAwLCBkb19oZWFwX2ZyZWUgPSAwOwogCi0gICAgZG9faGVhcF9mcmVlID0gKGhl YXBzX3VzZWQgKiBIRUFQX09CSl9MSU1JVCkgKiAwLjY1OwotICAgIGZyZWVfbWluID0gKGhlYXBz X3VzZWQgKiBIRUFQX09CSl9MSU1JVCkgICogMC4yOwotICAgIGlmIChmcmVlX21pbiA8IEZSRUVf TUlOKSB7Ci0JZG9faGVhcF9mcmVlID0gaGVhcHNfdXNlZCAqIEhFQVBfT0JKX0xJTUlUOwotICAg ICAgICBmcmVlX21pbiA9IEZSRUVfTUlOOworICAgIHdoaWxlICghZnJlZWxpc3QgJiYgaGVhcHNf c3dlZXBfaW5kZXggPCBoZWFwc191c2VkKSB7CisJc2xvdF9zd2VlcChvYmpzcGFjZSwgJmhlYXBz W2hlYXBzX3N3ZWVwX2luZGV4XSk7CisJaGVhcHNfc3dlZXBfaW5kZXgrKzsKICAgICB9Cit9CiAK LSAgICBmcmVlbGlzdCA9IDA7Ci0gICAgZmluYWxfbGlzdCA9IGRlZmVycmVkX2ZpbmFsX2xpc3Q7 Ci0gICAgZGVmZXJyZWRfZmluYWxfbGlzdCA9IDA7Ci0gICAgZm9yIChpID0gMDsgaSA8IGhlYXBz X3VzZWQ7IGkrKykgewotCWludCBuID0gMDsKLQlSVkFMVUUgKmZyZWUgPSBmcmVlbGlzdDsKLQlS VkFMVUUgKmZpbmFsID0gZmluYWxfbGlzdDsKK3N0YXRpYyBpbnQKK2djX2xhenlfc3dlZXAocmJf b2Jqc3BhY2VfdCAqb2Jqc3BhY2UsIHJiX3RocmVhZF90ICp0aCkKK3sKIAotCXAgPSBoZWFwc1tp XS5zbG90OyBwZW5kID0gcCArIGhlYXBzW2ldLmxpbWl0OwotCXdoaWxlIChwIDwgcGVuZCkgewot CSAgICBpZiAoIShwLT5hcy5iYXNpYy5mbGFncyAmIEZMX01BUkspKSB7Ci0JCWlmIChwLT5hcy5i YXNpYy5mbGFncykgewotCQkgICAgb2JqX2ZyZWUob2Jqc3BhY2UsIChWQUxVRSlwKTsKLQkJfQot CQlpZiAobmVlZF9jYWxsX2ZpbmFsICYmIEZMX1RFU1QocCwgRkxfRklOQUxJWkUpKSB7Ci0JCSAg ICBwLT5hcy5mcmVlLmZsYWdzID0gRkxfTUFSSzsgLyogcmVtYWluIG1hcmtlZCAqLwotCQkgICAg cC0+YXMuZnJlZS5uZXh0ID0gZmluYWxfbGlzdDsKLQkJICAgIGZpbmFsX2xpc3QgPSBwOwotCQl9 Ci0JCWVsc2UgewotICAgICAgICAgICAgICAgICAgICBWQUxHUklORF9NQUtFX01FTV9VTkRFRklO RUQoKHZvaWQqKXAsIHNpemVvZihSVkFMVUUpKTsKLQkJICAgIHAtPmFzLmZyZWUuZmxhZ3MgPSAw OwotCQkgICAgcC0+YXMuZnJlZS5uZXh0ID0gZnJlZWxpc3Q7Ci0JCSAgICBmcmVlbGlzdCA9IHA7 Ci0JCX0KLQkJbisrOwotCSAgICB9Ci0JICAgIGVsc2UgaWYgKFJCQVNJQyhwKS0+ZmxhZ3MgPT0g RkxfTUFSSykgewotCQkvKiBvYmplY3RzIHRvIGJlIGZpbmFsaXplZCAqLwotCQkvKiBkbyBub3Ro aW5nIHJlbWFpbiBtYXJrZWQgKi8KLQkgICAgfQotCSAgICBlbHNlIHsKLQkJUkJBU0lDKHApLT5m bGFncyAmPSB+RkxfTUFSSzsKLQkJbGl2ZSsrOwotCSAgICB9Ci0JICAgIHArKzsKLQl9Ci0JaWYg KG4gPT0gaGVhcHNbaV0ubGltaXQgJiYgZnJlZWQgPiBkb19oZWFwX2ZyZWUpIHsKLQkgICAgUlZB TFVFICpwcDsKLQotCSAgICBoZWFwc1tpXS5saW1pdCA9IDA7Ci0JICAgIGZvciAocHAgPSBmaW5h bF9saXN0OyBwcCAhPSBmaW5hbDsgcHAgPSBwcC0+YXMuZnJlZS5uZXh0KSB7Ci0JCXAtPmFzLmZy ZWUuZmxhZ3MgfD0gRkxfU0lOR0xFVE9OOyAvKiBmcmVlaW5nIHBhZ2UgbWFyayAqLwotCSAgICB9 Ci0JICAgIGZyZWVsaXN0ID0gZnJlZTsJLyogY2FuY2VsIHRoaXMgcGFnZSBmcm9tIGZyZWVsaXN0 ICovCi0JfQotCWVsc2UgewotCSAgICBmcmVlZCArPSBuOwotCX0KKyAgICBpZiAoaGVhcHNfaW5j cmVtZW50KG9ianNwYWNlKSkgeworCWhlYXBfc3dlZXBfaW5jcmVtZW50KG9ianNwYWNlKTsKICAg ICB9Ci0gICAgaWYgKG1hbGxvY19pbmNyZWFzZSA+IG1hbGxvY19saW1pdCkgewotCW1hbGxvY19s aW1pdCArPSAobWFsbG9jX2luY3JlYXNlIC0gbWFsbG9jX2xpbWl0KSAqIChkb3VibGUpbGl2ZSAv IChsaXZlICsgZnJlZWQpOwotCWlmIChtYWxsb2NfbGltaXQgPCBHQ19NQUxMT0NfTElNSVQpIG1h bGxvY19saW1pdCA9IEdDX01BTExPQ19MSU1JVDsKKyAgICBlbHNlIHsKKwloZWFwX3N3ZWVwKG9i anNwYWNlKTsKICAgICB9Ci0gICAgbWFsbG9jX2luY3JlYXNlID0gMDsKLSAgICBpZiAoZnJlZWQg PCBmcmVlX21pbikgewotICAgIAlzZXRfaGVhcHNfaW5jcmVtZW50KG9ianNwYWNlKTsKLQloZWFw c19pbmNyZW1lbnQob2Jqc3BhY2UpOworICAgIAorICAgIGlmICghZnJlZWxpc3QpIHsKKwlyZXR1 cm4gUWZhbHNlOwogICAgIH0KLSAgICBkdXJpbmdfZ2MgPSAwOwotCi0gICAgLyogY2xlYXIgZmlu YWxpemF0aW9uIGxpc3QgKi8KLSAgICBpZiAoZmluYWxfbGlzdCkgewotCWRlZmVycmVkX2ZpbmFs X2xpc3QgPSBmaW5hbF9saXN0OwotCXJldHVybjsKLSAgICB9Ci0gICAgZnJlZV91bnVzZWRfaGVh cHMob2Jqc3BhY2UpOworICAgIAorICAgIHJldHVybiBRdHJ1ZTsKIH0KIAogdm9pZAogcmJfZ2Nf Zm9yY2VfcmVjeWNsZShWQUxVRSBwKQogewotICAgIHJiX29ianNwYWNlX3QgKm9ianNwYWNlID0g JnJiX29ianNwYWNlOwogICAgIFZBTEdSSU5EX01BS0VfTUVNX1VOREVGSU5FRCgodm9pZCopcCwg c2l6ZW9mKFJWQUxVRSkpOwogICAgIFJBTlkocCktPmFzLmZyZWUuZmxhZ3MgPSAwOwotICAgIFJB TlkocCktPmFzLmZyZWUubmV4dCA9IGZyZWVsaXN0OwotICAgIGZyZWVsaXN0ID0gUkFOWShwKTsK IH0KIAogc3RhdGljIHZvaWQKQEAgLTE1ODksOCArMTU5Niw2IEBACiAjZW5kaWYgLyogX19odW1h bjY4a19fIG9yIERKR1BQICovCiAjZW5kaWYgLyogX19HTlVDX18gKi8KIAotI2RlZmluZSBHQ19O T1RJRlkgMAotCiB2b2lkIHJiX3ZtX21hcmsodm9pZCAqcHRyKTsKIAogc3RhdGljIHZvaWQKQEAg LTE2MzYsMzAgKzE2NDEsNzEgQEAKIAogdm9pZCByYl9nY19tYXJrX2VuY29kaW5ncyh2b2lkKTsK IAotc3RhdGljIGludAotZ2FyYmFnZV9jb2xsZWN0KHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQor c3RhdGljIHZvaWQKK2djX21hcmtfYWxsX2NsZWFyKHJiX29ianNwYWNlX3QgKm9ianNwYWNlKQog eworICAgIFJWQUxVRSAqbGFzdCA9IDA7CisgICAgc2l6ZV90IGksIGo7CisgICAgCisgICAgZm9y IChpID0gaiA9IDA7IGogPCBoZWFwc191c2VkOyBpKyspIHsKKwlpZiAoaGVhcHNbaV0uY29sb3Ig PT0gV0hJVEUgJiYgIWRlZmVycmVkX2ZpbmFsX2xpc3QpIHsKKwkgICAgaWYgKCFsYXN0KSB7CisJ CWxhc3QgPSBoZWFwc1tpXS5tZW1iYXNlOworCSAgICB9CisJICAgIGVsc2UgeworCQlmcmVlKGhl YXBzW2ldLm1lbWJhc2UpOworCSAgICB9CisJICAgIGhlYXBzX3VzZWQtLTsKKwl9CisJZWxzZSB7 CisJICAgIGlmIChoZWFwc1tpXS5jb2xvciA9PSBHUkFZKSB7CisJCVJWQUxVRSAqcCwgKnBlbmQ7 CisJCXAgPSBoZWFwc1tpXS5zbG90OyBwZW5kID0gcCArIGhlYXBzW2ldLmxpbWl0OworCQl3aGls ZSAocCA8IHBlbmQpIHsKKwkJICAgIGlmICghKFJCQVNJQyhwKS0+ZmxhZ3MgJiBGTF9NQVJLKSkg eworCQkJaWYgKHAtPmFzLmJhc2ljLmZsYWdzICYmICFGTF9URVNUKHAsIEZMX0ZJTkFMSVpFKSkg eworCQkJICAgIG9ial9mcmVlKG9ianNwYWNlLCAoVkFMVUUpcCk7CisJCQkgICAgVkFMR1JJTkRf TUFLRV9NRU1fVU5ERUZJTkVEKCh2b2lkKilwLCBzaXplb2YoUlZBTFVFKSk7CisJCQkgICAgcC0+ YXMuZnJlZS5mbGFncyA9IDA7CisJCQl9CisJCSAgICB9CisJCSAgICBlbHNlIGlmIChSQkFTSUMo cCktPmZsYWdzICE9IEZMX01BUkspIHsKKwkJCXAtPmFzLmJhc2ljLmZsYWdzICY9IH5GTF9NQVJL OworCQkgICAgfQorCQkgICAgcCsrOworCQl9CisJICAgIH0KKwkgICAgZWxzZSB7CisJCWhlYXBz W2ldLmNvbG9yID0gR1JBWTsKKwkgICAgfQorCSAgICBpZiAoaSAhPSBqKSB7CisJCWhlYXBzW2pd ID0gaGVhcHNbaV07CisJICAgIH0KKwkgICAgaisrOworCX0KKyAgICB9CisgICAgaWYgKGxhc3Qp IHsKKwlpZiAobGFzdCA8IGhlYXBzX2ZyZWVkKSB7CisJICAgIGZyZWUoaGVhcHNfZnJlZWQpOwor CSAgICBoZWFwc19mcmVlZCA9IGxhc3Q7CisJfQorCWVsc2UgeworCSAgICBmcmVlKGxhc3QpOwor CX0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitnY19tYXJrcyhyYl9vYmpzcGFjZV90ICpvYmpz cGFjZSwgcmJfdGhyZWFkX3QgKnRoKQorewogICAgIHN0cnVjdCBnY19saXN0ICpsaXN0OwotICAg IHJiX3RocmVhZF90ICp0aCA9IEdFVF9USFJFQUQoKTsKKyAgICBzaXplX3QgZnJlZV9taW4gPSAw OwogCi0gICAgaWYgKEdDX05PVElGWSkgcHJpbnRmKCJzdGFydCBnYXJiYWdlX2NvbGxlY3QoKVxu Iik7CisgICAgbGl2ZSA9IDA7CisgICAgZnJlZWxpc3QgPSAwOwogCi0gICAgaWYgKCFoZWFwcykg ewotCXJldHVybiBRZmFsc2U7Ci0gICAgfQorICAgIGdjX21hcmtfYWxsX2NsZWFyKG9ianNwYWNl KTsKIAotICAgIGlmIChkb250X2djIHx8IGR1cmluZ19nYykgewotCWlmICghZnJlZWxpc3QpIHsK LSAgICAgICAgICAgIGlmICghaGVhcHNfaW5jcmVtZW50KG9ianNwYWNlKSkgewotICAgICAgICAg ICAgICAgIHNldF9oZWFwc19pbmNyZW1lbnQob2Jqc3BhY2UpOwotICAgICAgICAgICAgICAgIGhl YXBzX2luY3JlbWVudChvYmpzcGFjZSk7Ci0gICAgICAgICAgICB9Ci0JfQotCXJldHVybiBRdHJ1 ZTsKLSAgICB9Ci0gICAgZHVyaW5nX2djKys7Ci0gICAgb2Jqc3BhY2UtPmNvdW50Kys7Ci0KICAg ICBTRVRfU1RBQ0tfRU5EOwogCiAgICAgaW5pdF9tYXJrX3N0YWNrKG9ianNwYWNlKTsKQEAgLTE3 MDEsOSArMTc0Nyw2MCBAQAogCX0KICAgICB9CiAKLSAgICBnY19zd2VlcChvYmpzcGFjZSk7Cisg ICAgZGVhZCA9IDA7CisgICAgaGVhcHNfc3dlZXBfaW5kZXggPSAwOworICAgIGhlYXBzX3N3ZWVw X2luYyA9IChoZWFwc191c2VkIC8gMTApICsgMTsKKyAgICBkb19oZWFwX2ZyZWUgPSAoaGVhcHNf dXNlZCAqIEhFQVBfT0JKX0xJTUlUKSAqIDAuNjU7CisgICAgZnJlZV9taW4gPSAoaGVhcHNfdXNl ZCAqIEhFQVBfT0JKX0xJTUlUKSAgKiAwLjI7CisgICAgaWYgKGZyZWVfbWluIDwgRlJFRV9NSU4p IGZyZWVfbWluID0gRlJFRV9NSU47CisgICAgaWYgKGZyZWVfbWluID4gKGhlYXBzX3VzZWQgKiBI RUFQX09CSl9MSU1JVCAtIGxpdmUpKSB7CisJc2V0X2hlYXBzX2luY3JlbWVudChvYmpzcGFjZSk7 CisJaGVhcHNfc3dlZXBfaW5jID0gKGhlYXBzX3VzZWQgKyBoZWFwc19zd2VlcF9pbmMpIC8gaGVh cHNfc3dlZXBfaW5jICsgMTsKKyAgICB9Cit9CiAKK3N0YXRpYyBpbnQKK2dhcmJhZ2VfY29sbGVj dF9mb3JjZShyYl9vYmpzcGFjZV90ICpvYmpzcGFjZSkKK3sKKyAgICBpZiAobWFsbG9jX2luY3Jl YXNlID4gbWFsbG9jX2xpbWl0KSB7CisJbWFsbG9jX2xpbWl0ICs9IChtYWxsb2NfaW5jcmVhc2Ug LSBtYWxsb2NfbGltaXQpICogKGRvdWJsZSlsaXZlIC8gKGhlYXBzX3VzZWQgKiBIRUFQX09CSl9M SU1JVCk7CisJaWYgKG1hbGxvY19saW1pdCA8IEdDX01BTExPQ19MSU1JVCkgbWFsbG9jX2xpbWl0 ID0gR0NfTUFMTE9DX0xJTUlUOworICAgIH0KKyAgICBtYWxsb2NfaW5jcmVhc2UgPSAwOworICAg IGdjX21hcmtzKG9ianNwYWNlLCBHRVRfVEhSRUFEKCkpOworICAgIHJldHVybiBnYXJiYWdlX2Nv bGxlY3Qob2Jqc3BhY2UpOworfQorCitzdGF0aWMgaW50CitnYXJiYWdlX2NvbGxlY3QocmJfb2Jq c3BhY2VfdCAqb2Jqc3BhY2UpCit7CisgICAgcmJfdGhyZWFkX3QgKnRoID0gR0VUX1RIUkVBRCgp OworCisgICAgaWYgKEdDX05PVElGWSkgcHJpbnRmKCJzdGFydCBnYXJiYWdlX2NvbGxlY3QoKVxu Iik7CisKKyAgICBpZiAoIWhlYXBzKSB7CisJcmV0dXJuIFFmYWxzZTsKKyAgICB9CisKKyAgICBp ZiAoZG9udF9nYyB8fCBkdXJpbmdfZ2MpIHsKKwlpZiAoIWZyZWVsaXN0KSB7CisgICAgICAgICAg ICBpZiAoIWhlYXBzX2luY3JlbWVudChvYmpzcGFjZSkpIHsKKyAgICAgICAgICAgICAgICBzZXRf aGVhcHNfaW5jcmVtZW50KG9ianNwYWNlKTsKKyAgICAgICAgICAgICAgICBoZWFwc19pbmNyZW1l bnQob2Jqc3BhY2UpOworICAgICAgICAgICAgfQorCX0KKwlyZXR1cm4gUXRydWU7CisgICAgfQor ICAgIGR1cmluZ19nYysrOworICAgIG9ianNwYWNlLT5jb3VudCsrOworCisgICAgd2hpbGUgKCFn Y19sYXp5X3N3ZWVwKG9ianNwYWNlLCB0aCkpIHsKKwlnY19tYXJrcyhvYmpzcGFjZSwgdGgpOwor ICAgIH0KKwogICAgIGlmIChHQ19OT1RJRlkpIHByaW50ZigiZW5kIGdhcmJhZ2VfY29sbGVjdCgp XG4iKTsKKyAgICBkdXJpbmdfZ2MgPSAwOworCiAgICAgcmV0dXJuIFF0cnVlOwogfQogCkBAIC0y MDQ4LDcgKzIxNDUsNiBAQAogICAgIGlmIChwKSB7CiAJZmluYWxpemVfbGlzdChvYmpzcGFjZSwg cCk7CiAgICAgfQotICAgIGZyZWVfdW51c2VkX2hlYXBzKG9ianNwYWNlKTsKICAgICBkdXJpbmdf Z2MgPSAwOwogfQogCkBAIC0yMTE2LDggKzIyMTIsOCBAQAogcmJfZ2Modm9pZCkKIHsKICAgICBy Yl9vYmpzcGFjZV90ICpvYmpzcGFjZSA9ICZyYl9vYmpzcGFjZTsKKyAgICBnY19maW5hbGl6ZV9k ZWZlcnJlZChvYmpzcGFjZSk7CiAgICAgZ2FyYmFnZV9jb2xsZWN0KG9ianNwYWNlKTsKLSAgICBn Y19maW5hbGl6ZV9kZWZlcnJlZChvYmpzcGFjZSk7CiB9CiAKIC8qCg== ------=_Part_10476_24774291.1211335812871--