From: SASADA Koichi Date: 2009-06-08T03:54:28+09:00 Subject: [ruby-dev:38575] [Feature: 1.9.2] rename rb_thread_* functions This is a multi-part message in MIME format. --------------070201030604090200000804 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit  ささだです.  現在,thread.c で定義されている rb_thread_... という関数のうち,いくつ かの関数は rb_thread_t * を引数にしています.このような関数の prefix を rb_th_... にしても良いでしょうか. メリット: ・rb_thread_... を見たら,Thread インスタンスを渡す関数だとわかる. ・rb_th_... を見たら,VM インターナルな関数だとわかる. (そういう意味では,rb_vm_... でもいいかもしれないが,  rb_vm_t * が引数な関数と見分けが付かない) 懸念: ・static 関数への影響  あまり問題ないと考えられます. ・!static 関数への影響  バイナリ互換性の問題が生じますが,そもそも rb_thread_t * を得る関数が ないので,拡張ライブラリから rb_thread_t * を引数とする関数は呼べなかっ たわけです(ごにょごにょすると取れますが,それもちょっと).というわけ で,問題ないんじゃないかなぁ,と思います.  ただ,include/ruby/intern.h に, void rb_thread_signal_raise(void *, int); void rb_thread_signal_exit(void *); なんてのがあったんですが,これは外から使うんでしょうか.とりあえず, rb_th_... に変更してしまったんですが.  パッチを添付します.ご検討下さい. -- // SASADA Koichi at atdot dot net --------------070201030604090200000804 Content-Type: text/plain; name="rb_th.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="rb_th.patch" SW5kZXg6IGV2YWxfaW50ZXJuLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBldmFsX2ludGVybi5o CSiDioNyg1eDh4OTIDIzNjM5KQ0KKysrIGV2YWxfaW50ZXJuLmgJKI3si8aDUoNzgVspDQpA QCAtMTg1LDggKzE4NSw4IEBAIGVudW0gew0KICAgICBSQUlTRURfU1RBQ0tPVkVSRkxPVyA9 IDIsDQogICAgIFJBSVNFRF9OT01FTU9SWSA9IDQNCiB9Ow0KLWludCByYl90aHJlYWRfc2V0 X3JhaXNlZChyYl90aHJlYWRfdCAqdGgpOw0KLWludCByYl90aHJlYWRfcmVzZXRfcmFpc2Vk KHJiX3RocmVhZF90ICp0aCk7DQoraW50IHJiX3RoX3NldF9yYWlzZWQocmJfdGhyZWFkX3Qg KnRoKTsNCitpbnQgcmJfdGhfcmVzZXRfcmFpc2VkKHJiX3RocmVhZF90ICp0aCk7DQogI2Rl ZmluZSByYl90aHJlYWRfcmFpc2VkX3NldCh0aCwgZikgICAoKHRoKS0+cmFpc2VkX2ZsYWcg fD0gKGYpKQ0KICNkZWZpbmUgcmJfdGhyZWFkX3JhaXNlZF9yZXNldCh0aCwgZikgKCh0aCkt PnJhaXNlZF9mbGFnICY9IH4oZikpDQogI2RlZmluZSByYl90aHJlYWRfcmFpc2VkX3AodGgs IGYpICAgICAoKCh0aCktPnJhaXNlZF9mbGFnICYgKGYpKSAhPSAwKQ0KSW5kZXg6IGluY2x1 ZGUvcnVieS9pbnRlcm4uaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGluY2x1ZGUvcnVieS9pbnRl cm4uaAkog4qDcoNXg4eDkyAyMzYzOSkNCisrKyBpbmNsdWRlL3J1YnkvaW50ZXJuLmgJKI3s i8aDUoNzgVspDQpAQCAtMzI4LDggKzMyOCw2IEBAIFZBTFVFIHJiX3RocmVhZF93YWtldXAo VkFMVUUpOw0KIFZBTFVFIHJiX3RocmVhZF9ydW4oVkFMVUUpOw0KIFZBTFVFIHJiX3RocmVh ZF9raWxsKFZBTFVFKTsNCiBWQUxVRSByYl90aHJlYWRfY3JlYXRlKFZBTFVFICgqKShBTllB UkdTKSwgdm9pZCopOw0KLXZvaWQgcmJfdGhyZWFkX3NpZ25hbF9yYWlzZSh2b2lkICosIGlu dCk7DQotdm9pZCByYl90aHJlYWRfc2lnbmFsX2V4aXQodm9pZCAqKTsNCiBpbnQgcmJfdGhy ZWFkX3NlbGVjdChpbnQsIGZkX3NldCAqLCBmZF9zZXQgKiwgZmRfc2V0ICosIHN0cnVjdCB0 aW1ldmFsICopOw0KIGludCByYl90aHJlYWRfZmRfc2VsZWN0KGludCwgcmJfZmRzZXRfdCAq LCByYl9mZHNldF90ICosIHJiX2Zkc2V0X3QgKiwgc3RydWN0IHRpbWV2YWwgKik7DQogdm9p ZCByYl90aHJlYWRfd2FpdF9mb3Ioc3RydWN0IHRpbWV2YWwpOw0KSW5kZXg6IHZtX2NvcmUu aA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KLS0tIHZtX2NvcmUuaAkog4qDcoNXg4eDkyAyMzYzOSkNCisr KyB2bV9jb3JlLmgJKI3si8aDUoNzgVspDQpAQCAtNjI1LDExICs2MjUsMTMgQEAgZXh0ZXJu IHJiX3ZtX3QgKnJ1YnlfY3VycmVudF92bTsNCiAjZGVmaW5lIFJVQllfVk1fU0VUX0ZJTkFM SVpFUl9JTlRFUlJVUFQodGgpICgodGgpLT5pbnRlcnJ1cHRfZmxhZyB8PSAweDA0KQ0KICNk ZWZpbmUgUlVCWV9WTV9JTlRFUlJVUFRFRCh0aCkgKCh0aCktPmludGVycnVwdF9mbGFnICYg MHgwMikNCiANCi12b2lkIHJiX3RocmVhZF9leGVjdXRlX2ludGVycnVwdHMocmJfdGhyZWFk X3QgKik7DQordm9pZCByYl90aF9zaWduYWxfcmFpc2UocmJfdGhyZWFkX3QgKnRoLCBpbnQg c2lnKTsNCit2b2lkIHJiX3RoX3NpZ25hbF9leGl0KHJiX3RocmVhZF90ICp0aCk7DQordm9p ZCByYl90aF9leGVjdXRlX2ludGVycnVwdHMocmJfdGhyZWFkX3QgKik7DQogDQogI2RlZmlu ZSBSVUJZX1ZNX0NIRUNLX0lOVFNfVEgodGgpIGRvIHsgXA0KICAgaWYgKFVOTElLRUxZKHRo LT5pbnRlcnJ1cHRfZmxhZykpIHsgXA0KLSAgICByYl90aHJlYWRfZXhlY3V0ZV9pbnRlcnJ1 cHRzKHRoKTsgXA0KKyAgICByYl90aF9leGVjdXRlX2ludGVycnVwdHModGgpOyBcDQogICB9 IFwNCiB9IHdoaWxlICgwKQ0KIA0KSW5kZXg6IGV2YWxfZXJyb3IuYw0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KLS0tIGV2YWxfZXJyb3IuYwkog4qDcoNXg4eDkyAyMzYzOSkNCisrKyBldmFsX2Vycm9y LmMJKI3si8aDUoNzgVspDQpAQCAtMjE1LDcgKzIxNSw3IEBAIGVycm9yX2hhbmRsZShpbnQg ZXgpDQogICAgIGludCBzdGF0dXMgPSBFWElUX0ZBSUxVUkU7DQogICAgIHJiX3RocmVhZF90 ICp0aCA9IEdFVF9USFJFQUQoKTsNCiANCi0gICAgaWYgKHJiX3RocmVhZF9zZXRfcmFpc2Vk KHRoKSkNCisgICAgaWYgKHJiX3RoX3NldF9yYWlzZWQodGgpKQ0KIAlyZXR1cm4gRVhJVF9G QUlMVVJFOw0KICAgICBzd2l0Y2ggKGV4ICYgVEFHX01BU0spIHsNCiAgICAgICBjYXNlIDA6 DQpAQCAtMjY3LDYgKzI2Nyw2IEBAIGVycm9yX2hhbmRsZShpbnQgZXgpDQogCXJiX2J1Zygi VW5rbm93biBsb25nam1wIHN0YXR1cyAlZCIsIGV4KTsNCiAJYnJlYWs7DQogICAgIH0NCi0g ICAgcmJfdGhyZWFkX3Jlc2V0X3JhaXNlZCh0aCk7DQorICAgIHJiX3RoX3Jlc2V0X3JhaXNl ZCh0aCk7DQogICAgIHJldHVybiBzdGF0dXM7DQogfQ0KSW5kZXg6IHRocmVhZC5jDQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQotLS0gdGhyZWFkLmMJKIOKg3KDV4OHg5MgMjM2MzkpDQorKysgdGhyZWFk LmMJKI3si8aDUoNzgVspDQpAQCAtNjUsNyArNjUsNyBAQCBzdGF0aWMgdm9pZCBzbGVlcF93 YWl0X2Zvcl9pbnRlcnJ1cHQocmJfDQogc3RhdGljIHZvaWQgc2xlZXBfZm9yZXZlcihyYl90 aHJlYWRfdCAqdGgsIGludCBub2RlYWRsb2NrKTsNCiBzdGF0aWMgZG91YmxlIHRpbWVvZmRh eSh2b2lkKTsNCiBzdHJ1Y3QgdGltZXZhbCByYl90aW1lX2ludGVydmFsKFZBTFVFKTsNCi1z dGF0aWMgaW50IHJiX3RocmVhZF9kZWFkKHJiX3RocmVhZF90ICp0aCk7DQorc3RhdGljIGlu dCByYl90aF9kZWFkKHJiX3RocmVhZF90ICp0aCk7DQogDQogc3RhdGljIHZvaWQgcmJfY2hl Y2tfZGVhZGxvY2socmJfdm1fdCAqdm0pOw0KIA0KQEAgLTI0OSw3ICsyNDksNyBAQCByZXNl dF91bmJsb2NrX2Z1bmN0aW9uKHJiX3RocmVhZF90ICp0aCwgDQogfQ0KIA0KIHN0YXRpYyB2 b2lkDQotcmJfdGhyZWFkX2ludGVycnVwdChyYl90aHJlYWRfdCAqdGgpDQorcmJfdGhfaW50 ZXJydXB0KHJiX3RocmVhZF90ICp0aCkNCiB7DQogICAgIG5hdGl2ZV9tdXRleF9sb2NrKCZ0 aC0+aW50ZXJydXB0X2xvY2spOw0KICAgICBSVUJZX1ZNX1NFVF9JTlRFUlJVUFQodGgpOw0K QEAgLTI3Miw3ICsyNzIsNyBAQCB0ZXJtaW5hdGVfaShzdF9kYXRhX3Qga2V5LCBzdF9kYXRh X3QgdmFsDQogDQogICAgIGlmICh0aCAhPSBtYWluX3RocmVhZCkgew0KIAl0aHJlYWRfZGVi dWcoInRlcm1pbmF0ZV9pOiAlcFxuIiwgKHZvaWQgKil0aCk7DQotCXJiX3RocmVhZF9pbnRl cnJ1cHQodGgpOw0KKwlyYl90aF9pbnRlcnJ1cHQodGgpOw0KIAl0aC0+dGhyb3duX2Vycmlu Zm8gPSBlVGVybWluYXRlU2lnbmFsOw0KIAl0aC0+c3RhdHVzID0gVEhSRUFEX1RPX0tJTEw7 DQogICAgIH0NCkBAIC0zNTAsNyArMzUwLDcgQEAgdGhyZWFkX2NsZWFudXBfZnVuYyh2b2lk ICp0aF9wdHIpDQogfQ0KIA0KIGV4dGVybiB2b2lkIHJ1YnlfZXJyb3JfcHJpbnQodm9pZCk7 DQotc3RhdGljIFZBTFVFIHJiX3RocmVhZF9yYWlzZShpbnQsIFZBTFVFICosIHJiX3RocmVh ZF90ICopOw0KK3N0YXRpYyBWQUxVRSByYl90aF9yYWlzZShyYl90aHJlYWRfdCAqLCBpbnQs IFZBTFVFICopOw0KIHZvaWQgcmJfdGhyZWFkX3JlY3ljbGVfc3RhY2tfcmVsZWFzZShWQUxV RSAqKTsNCiANCiB2b2lkDQpAQCAtNDI5LDcgKzQyOSw3IEBAIHRocmVhZF9zdGFydF9mdW5j XzIocmJfdGhyZWFkX3QgKnRoLCBWQUwNCiAJaWYgKHRoICE9IG1haW5fdGgpIHsNCiAJICAg IGlmIChUWVBFKGVycmluZm8pID09IFRfT0JKRUNUKSB7DQogCQkvKiB0cmVhdCB3aXRoIG5v cm1hbCBlcnJvciBvYmplY3QgKi8NCi0JCXJiX3RocmVhZF9yYWlzZSgxLCAmZXJyaW5mbywg bWFpbl90aCk7DQorCQlyYl90aF9yYWlzZShtYWluX3RoLCAxLCAmZXJyaW5mbyk7DQogCSAg ICB9DQogCX0NCiAJVEhfUE9QX1RBRygpOw0KQEAgLTQ0OSw3ICs0NDksNyBAQCB0aHJlYWRf c3RhcnRfZnVuY18yKHJiX3RocmVhZF90ICp0aCwgVkFMDQogCWpvaW5fdGggPSB0aC0+am9p bl9saXN0X2hlYWQ7DQogCXdoaWxlIChqb2luX3RoKSB7DQogCSAgICBpZiAoam9pbl90aCA9 PSBtYWluX3RoKSBlcnJpbmZvID0gUW5pbDsNCi0JICAgIHJiX3RocmVhZF9pbnRlcnJ1cHQo am9pbl90aCk7DQorCSAgICByYl90aF9pbnRlcnJ1cHQoam9pbl90aCk7DQogCSAgICBzd2l0 Y2ggKGpvaW5fdGgtPnN0YXR1cykgew0KIAkgICAgICBjYXNlIFRIUkVBRF9TVE9QUEVEOiBj YXNlIFRIUkVBRF9TVE9QUEVEX0ZPUkVWRVI6DQogCQlqb2luX3RoLT5zdGF0dXMgPSBUSFJF QURfUlVOTkFCTEU7DQpAQCAtMTE4MCw3ICsxMTgwLDcgQEAgdGhyZWFkX3NfcGFzcyhWQUxV RSBrbGFzcykNCiAgKi8NCiANCiB2b2lkDQotcmJfdGhyZWFkX2V4ZWN1dGVfaW50ZXJydXB0 cyhyYl90aHJlYWRfdCAqdGgpDQorcmJfdGhfZXhlY3V0ZV9pbnRlcnJ1cHRzKHJiX3RocmVh ZF90ICp0aCkNCiB7DQogICAgIGlmIChHRVRfVk0oKS0+bWFpbl90aHJlYWQgPT0gdGgpIHsN CiAJd2hpbGUgKHJiX3NpZ25hbF9idWZmX3NpemUoKSAmJiAhdGgtPmV4ZWNfc2lnbmFsKSBu YXRpdmVfdGhyZWFkX3lpZWxkKCk7DQpAQCAtMTI1NCwxOCArMTI1NCwxOCBAQCByYl9nY19t YXJrX3RocmVhZHModm9pZCkNCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovDQogDQogc3RhdGljIHZvaWQNCi1yYl90aHJlYWRfcmVh ZHkocmJfdGhyZWFkX3QgKnRoKQ0KK3JiX3RoX3JlYWR5KHJiX3RocmVhZF90ICp0aCkNCiB7 DQotICAgIHJiX3RocmVhZF9pbnRlcnJ1cHQodGgpOw0KKyAgICByYl90aF9pbnRlcnJ1cHQo dGgpOw0KIH0NCiANCiBzdGF0aWMgVkFMVUUNCi1yYl90aHJlYWRfcmFpc2UoaW50IGFyZ2Ms IFZBTFVFICphcmd2LCByYl90aHJlYWRfdCAqdGgpDQorcmJfdGhfcmFpc2UocmJfdGhyZWFk X3QgKnRoLCBpbnQgYXJnYywgVkFMVUUgKmFyZ3YpDQogew0KICAgICBWQUxVRSBleGM7DQog DQogICBhZ2FpbjoNCi0gICAgaWYgKHJiX3RocmVhZF9kZWFkKHRoKSkgew0KKyAgICBpZiAo cmJfdGhfZGVhZCh0aCkpIHsNCiAJcmV0dXJuIFFuaWw7DQogICAgIH0NCiANCkBAIC0xMjc2 LDMwICsxMjc2LDI4IEBAIHJiX3RocmVhZF9yYWlzZShpbnQgYXJnYywgVkFMVUUgKmFyZ3Ys IHINCiANCiAgICAgZXhjID0gcmJfbWFrZV9leGNlcHRpb24oYXJnYywgYXJndik7DQogICAg IHRoLT50aHJvd25fZXJyaW5mbyA9IGV4YzsNCi0gICAgcmJfdGhyZWFkX3JlYWR5KHRoKTsN CisgICAgcmJfdGhfcmVhZHkodGgpOw0KICAgICByZXR1cm4gUW5pbDsNCiB9DQogDQogdm9p ZA0KLXJiX3RocmVhZF9zaWduYWxfcmFpc2Uodm9pZCAqdGhwdHIsIGludCBzaWcpDQorcmJf dGhfc2lnbmFsX3JhaXNlKHJiX3RocmVhZF90ICp0aCwgaW50IHNpZykNCiB7DQogICAgIFZB TFVFIGFyZ3ZbMl07DQotICAgIHJiX3RocmVhZF90ICp0aCA9IHRocHRyOw0KIA0KICAgICBh cmd2WzBdID0gcmJfZVNpZ25hbDsNCiAgICAgYXJndlsxXSA9IElOVDJGSVgoc2lnKTsNCi0g ICAgcmJfdGhyZWFkX3JhaXNlKDIsIGFyZ3YsIHRoLT52bS0+bWFpbl90aHJlYWQpOw0KKyAg ICByYl90aF9yYWlzZSh0aC0+dm0tPm1haW5fdGhyZWFkLCAyLCBhcmd2KTsNCiB9DQogDQog dm9pZA0KLXJiX3RocmVhZF9zaWduYWxfZXhpdCh2b2lkICp0aHB0cikNCityYl90aF9zaWdu YWxfZXhpdChyYl90aHJlYWRfdCAqdGgpDQogew0KICAgICBWQUxVRSBhcmd2WzJdOw0KLSAg ICByYl90aHJlYWRfdCAqdGggPSB0aHB0cjsNCiANCiAgICAgYXJndlswXSA9IHJiX2VTeXN0 ZW1FeGl0Ow0KICAgICBhcmd2WzFdID0gcmJfc3RyX25ldzIoImV4aXQiKTsNCi0gICAgcmJf dGhyZWFkX3JhaXNlKDIsIGFyZ3YsIHRoLT52bS0+bWFpbl90aHJlYWQpOw0KKyAgICByYl90 aF9yYWlzZSh0aC0+dm0tPm1haW5fdGhyZWFkLCAyLCBhcmd2KTsNCiB9DQogDQogdm9pZA0K QEAgLTEzMTEsNyArMTMwOSw3IEBAIHJ1YnlfdGhyZWFkX3N0YWNrX292ZXJmbG93KHJiX3Ro cmVhZF90ICoNCiB9DQogDQogaW50DQotcmJfdGhyZWFkX3NldF9yYWlzZWQocmJfdGhyZWFk X3QgKnRoKQ0KK3JiX3RoX3NldF9yYWlzZWQocmJfdGhyZWFkX3QgKnRoKQ0KIHsNCiAgICAg aWYgKHRoLT5yYWlzZWRfZmxhZyAmIFJBSVNFRF9FWENFUFRJT04pIHsNCiAJcmV0dXJuIDE7 DQpAQCAtMTMyMSw3ICsxMzE5LDcgQEAgcmJfdGhyZWFkX3NldF9yYWlzZWQocmJfdGhyZWFk X3QgKnRoKQ0KIH0NCiANCiBpbnQNCi1yYl90aHJlYWRfcmVzZXRfcmFpc2VkKHJiX3RocmVh ZF90ICp0aCkNCityYl90aF9yZXNldF9yYWlzZWQocmJfdGhyZWFkX3QgKnRoKQ0KIHsNCiAg ICAgaWYgKCEodGgtPnJhaXNlZF9mbGFnICYgUkFJU0VEX0VYQ0VQVElPTikpIHsNCiAJcmV0 dXJuIDA7DQpAQCAtMTM2MCw3ICsxMzU4LDcgQEAgdGhyZWFkX3JhaXNlX20oaW50IGFyZ2Ms IFZBTFVFICphcmd2LCBWQQ0KIHsNCiAgICAgcmJfdGhyZWFkX3QgKnRoOw0KICAgICBHZXRU aHJlYWRQdHIoc2VsZiwgdGgpOw0KLSAgICByYl90aHJlYWRfcmFpc2UoYXJnYywgYXJndiwg dGgpOw0KKyAgICByYl90aF9yYWlzZSh0aCwgYXJnYywgYXJndik7DQogICAgIHJldHVybiBR bmlsOw0KIH0NCiANCkBAIC0xMzk2LDcgKzEzOTQsNyBAQCByYl90aHJlYWRfa2lsbChWQUxV RSB0aHJlYWQpDQogDQogICAgIHRocmVhZF9kZWJ1ZygicmJfdGhyZWFkX2tpbGw6ICVwICgl cClcbiIsICh2b2lkICopdGgsICh2b2lkICopdGgtPnRocmVhZF9pZCk7DQogDQotICAgIHJi X3RocmVhZF9pbnRlcnJ1cHQodGgpOw0KKyAgICByYl90aF9pbnRlcnJ1cHQodGgpOw0KICAg ICB0aC0+dGhyb3duX2VycmluZm8gPSBlS2lsbFNpZ25hbDsNCiAgICAgdGgtPnN0YXR1cyA9 IFRIUkVBRF9UT19LSUxMOw0KIA0KQEAgLTE0NjYsNyArMTQ2NCw3IEBAIHJiX3RocmVhZF93 YWtldXAoVkFMVUUgdGhyZWFkKQ0KICAgICBpZiAodGgtPnN0YXR1cyA9PSBUSFJFQURfS0lM TEVEKSB7DQogCXJiX3JhaXNlKHJiX2VUaHJlYWRFcnJvciwgImtpbGxlZCB0aHJlYWQiKTsN CiAgICAgfQ0KLSAgICByYl90aHJlYWRfcmVhZHkodGgpOw0KKyAgICByYl90aF9yZWFkeSh0 aCk7DQogICAgIGlmICh0aC0+c3RhdHVzICE9IFRIUkVBRF9UT19LSUxMKSB7DQogCXRoLT5z dGF0dXMgPSBUSFJFQURfUlVOTkFCTEU7DQogICAgIH0NCkBAIC0xNzQ4LDcgKzE3NDYsNyBA QCB0aHJlYWRfc3RhdHVzX25hbWUoZW51bSByYl90aHJlYWRfc3RhdHVzDQogfQ0KIA0KIHN0 YXRpYyBpbnQNCi1yYl90aHJlYWRfZGVhZChyYl90aHJlYWRfdCAqdGgpDQorcmJfdGhfZGVh ZChyYl90aHJlYWRfdCAqdGgpDQogew0KICAgICByZXR1cm4gdGgtPnN0YXR1cyA9PSBUSFJF QURfS0lMTEVEOw0KIH0NCkBAIC0xNzgyLDcgKzE3ODAsNyBAQCByYl90aHJlYWRfc3RhdHVz KFZBTFVFIHRocmVhZCkNCiAgICAgcmJfdGhyZWFkX3QgKnRoOw0KICAgICBHZXRUaHJlYWRQ dHIodGhyZWFkLCB0aCk7DQogDQotICAgIGlmIChyYl90aHJlYWRfZGVhZCh0aCkpIHsNCisg ICAgaWYgKHJiX3RoX2RlYWQodGgpKSB7DQogCWlmICghTklMX1AodGgtPmVycmluZm8pICYm ICFGSVhOVU1fUCh0aC0+ZXJyaW5mbykNCiAJICAgIC8qIFRPRE8gKi8gKSB7DQogCSAgICBy ZXR1cm4gUW5pbDsNCkBAIC0xODExLDcgKzE4MDksNyBAQCByYl90aHJlYWRfYWxpdmVfcChW QUxVRSB0aHJlYWQpDQogICAgIHJiX3RocmVhZF90ICp0aDsNCiAgICAgR2V0VGhyZWFkUHRy KHRocmVhZCwgdGgpOw0KIA0KLSAgICBpZiAocmJfdGhyZWFkX2RlYWQodGgpKQ0KKyAgICBp ZiAocmJfdGhfZGVhZCh0aCkpDQogCXJldHVybiBRZmFsc2U7DQogICAgIHJldHVybiBRdHJ1 ZTsNCiB9DQpAQCAtMTgzNCw3ICsxODMyLDcgQEAgcmJfdGhyZWFkX3N0b3BfcChWQUxVRSB0 aHJlYWQpDQogICAgIHJiX3RocmVhZF90ICp0aDsNCiAgICAgR2V0VGhyZWFkUHRyKHRocmVh ZCwgdGgpOw0KIA0KLSAgICBpZiAocmJfdGhyZWFkX2RlYWQodGgpKQ0KKyAgICBpZiAocmJf dGhfZGVhZCh0aCkpDQogCXJldHVybiBRdHJ1ZTsNCiAgICAgaWYgKHRoLT5zdGF0dXMgPT0g VEhSRUFEX1NUT1BQRUQgfHwgdGgtPnN0YXR1cyA9PSBUSFJFQURfU1RPUFBFRF9GT1JFVkVS KQ0KIAlyZXR1cm4gUXRydWU7DQpAQCAtMjU2OSw3ICsyNTY3LDcgQEAgdGltZXJfdGhyZWFk X2Z1bmN0aW9uKHZvaWQgKmFyZykNCiAJCSAgICAgdGhyZWFkX3N0YXR1c19uYW1lKHByZXZf c3RhdHVzKSwgc2lnKTsNCiAJbXRoLT5leGVjX3NpZ25hbCA9IHNpZzsNCiAJaWYgKG10aC0+ c3RhdHVzICE9IFRIUkVBRF9LSUxMRUQpIG10aC0+c3RhdHVzID0gVEhSRUFEX1JVTk5BQkxF Ow0KLQlyYl90aHJlYWRfaW50ZXJydXB0KG10aCk7DQorCXJiX3RoX2ludGVycnVwdChtdGgp Ow0KIAltdGgtPnN0YXR1cyA9IHByZXZfc3RhdHVzOw0KICAgICB9DQogDQpAQCAtMzQ3NSw3 ICszNDczLDcgQEAgdGhyZWFkX3Jlc2V0X2V2ZW50X2ZsYWdzKHJiX3RocmVhZF90ICp0aA0K IH0NCiANCiB2b2lkDQotcmJfdGhyZWFkX2FkZF9ldmVudF9ob29rKHJiX3RocmVhZF90ICp0 aCwNCityYl90aF9hZGRfZXZlbnRfaG9vayhyYl90aHJlYWRfdCAqdGgsIA0KIAkJCSByYl9l dmVudF9ob29rX2Z1bmNfdCBmdW5jLCByYl9ldmVudF9mbGFnX3QgZXZlbnRzLCBWQUxVRSBk YXRhKQ0KIHsNCiAgICAgcmJfZXZlbnRfaG9va190ICpob29rID0gYWxsb2NfZXZlbnRfaG9v ayhmdW5jLCBldmVudHMsIGRhdGEpOw0KQEAgLTM0ODQsNiArMzQ4MiwyMSBAQCByYl90aHJl YWRfYWRkX2V2ZW50X2hvb2socmJfdGhyZWFkX3QgKnRoDQogICAgIHRocmVhZF9yZXNldF9l dmVudF9mbGFncyh0aCk7DQogfQ0KIA0KK3N0YXRpYyByYl90aHJlYWRfdCAqDQordGh2YWwy dGhyZWFkX3QoVkFMVUUgdGh2YWwpDQorew0KKyAgICByYl90aHJlYWRfdCAqdGg7DQorICAg IEdldFRocmVhZFB0cih0aHZhbCwgdGgpOw0KKyAgICByZXR1cm4gdGg7DQorfQ0KKw0KK3Zv aWQNCityYl90aHJlYWRfYWRkX2V2ZW50X2hvb2soVkFMVUUgdGh2YWwsDQorCQkJIHJiX2V2 ZW50X2hvb2tfZnVuY190IGZ1bmMsIHJiX2V2ZW50X2ZsYWdfdCBldmVudHMsIFZBTFVFIGRh dGEpDQorew0KKyAgICByYl90aF9hZGRfZXZlbnRfaG9vayh0aHZhbDJ0aHJlYWRfdCh0aHZh bCksIGZ1bmMsIGV2ZW50cywgZGF0YSk7DQorfQ0KKw0KIHN0YXRpYyBpbnQNCiBzZXRfdGhy ZWFkc19ldmVudF9mbGFnc19pKHN0X2RhdGFfdCBrZXksIHN0X2RhdGFfdCB2YWwsIHN0X2Rh dGFfdCBmbGFnKQ0KIHsNCkBAIC0zNTQyLDggKzM1NTUsOCBAQCByZW1vdmVfZXZlbnRfaG9v ayhyYl9ldmVudF9ob29rX3QgKipyb290DQogICAgIHJldHVybiAtMTsNCiB9DQogDQotaW50 DQotcmJfdGhyZWFkX3JlbW92ZV9ldmVudF9ob29rKHJiX3RocmVhZF90ICp0aCwgcmJfZXZl bnRfaG9va19mdW5jX3QgZnVuYykNCitzdGF0aWMgaW50DQorcmJfdGhfcmV2bW92ZV9ldmVu dF9ob29rKHJiX3RocmVhZF90ICp0aCwgcmJfZXZlbnRfaG9va19mdW5jX3QgZnVuYykNCiB7 DQogICAgIGludCByZXQgPSByZW1vdmVfZXZlbnRfaG9vaygmdGgtPmV2ZW50X2hvb2tzLCBm dW5jKTsNCiAgICAgdGhyZWFkX3Jlc2V0X2V2ZW50X2ZsYWdzKHRoKTsNCkBAIC0zNTUxLDYg KzM1NjQsMTIgQEAgcmJfdGhyZWFkX3JlbW92ZV9ldmVudF9ob29rKHJiX3RocmVhZF90IA0K IH0NCiANCiBpbnQNCityYl90aHJlYWRfcmVtb3ZlX2V2ZW50X2hvb2soVkFMVUUgdGh2YWws IHJiX2V2ZW50X2hvb2tfZnVuY190IGZ1bmMpDQorew0KKyAgICByZXR1cm4gcmJfdGhfcmV2 bW92ZV9ldmVudF9ob29rKHRodmFsMnRocmVhZF90KHRodmFsKSwgZnVuYyk7DQorfQ0KKw0K K2ludA0KIHJiX3JlbW92ZV9ldmVudF9ob29rKHJiX2V2ZW50X2hvb2tfZnVuY190IGZ1bmMp DQogew0KICAgICByYl92bV90ICp2bSA9IEdFVF9WTSgpOw0KQEAgLTM1NjksNyArMzU4OCw3 IEBAIGNsZWFyX3RyYWNlX2Z1bmNfaShzdF9kYXRhX3Qga2V5LCBzdF9kYXQNCiB7DQogICAg IHJiX3RocmVhZF90ICp0aDsNCiAgICAgR2V0VGhyZWFkUHRyKChWQUxVRSlrZXksIHRoKTsN Ci0gICAgcmJfdGhyZWFkX3JlbW92ZV9ldmVudF9ob29rKHRoLCAwKTsNCisgICAgcmJfdGhf cmV2bW92ZV9ldmVudF9ob29rKHRoLCAwKTsNCiAgICAgcmV0dXJuIFNUX0NPTlRJTlVFOw0K IH0NCiANCkBAIC0zNjQ5LDcgKzM2NjgsNyBAQCB0aHJlYWRfYWRkX3RyYWNlX2Z1bmMocmJf dGhyZWFkX3QgKnRoLCBWDQogCXJiX3JhaXNlKHJiX2VUeXBlRXJyb3IsICJ0cmFjZV9mdW5j IG5lZWRzIHRvIGJlIFByb2MiKTsNCiAgICAgfQ0KIA0KLSAgICByYl90aHJlYWRfYWRkX2V2 ZW50X2hvb2sodGgsIGNhbGxfdHJhY2VfZnVuYywgUlVCWV9FVkVOVF9BTEwsIHRyYWNlKTsN CisgICAgcmJfdGhfYWRkX2V2ZW50X2hvb2sodGgsIGNhbGxfdHJhY2VfZnVuYywgUlVCWV9F VkVOVF9BTEwsIHRyYWNlKTsNCiB9DQogDQogc3RhdGljIFZBTFVFDQpAQCAtMzY2Niw3ICsz Njg1LDcgQEAgdGhyZWFkX3NldF90cmFjZV9mdW5jX20oVkFMVUUgb2JqLCBWQUxVRQ0KIHsN CiAgICAgcmJfdGhyZWFkX3QgKnRoOw0KICAgICBHZXRUaHJlYWRQdHIob2JqLCB0aCk7DQot ICAgIHJiX3RocmVhZF9yZW1vdmVfZXZlbnRfaG9vayh0aCwgY2FsbF90cmFjZV9mdW5jKTsN CisgICAgcmJfdGhfcmV2bW92ZV9ldmVudF9ob29rKHRoLCBjYWxsX3RyYWNlX2Z1bmMpOw0K IA0KICAgICBpZiAoTklMX1AodHJhY2UpKSB7DQogCXJldHVybiBRbmlsOw0KQEAgLTM3Nzgs NyArMzc5Nyw3IEBAIHJ1Ynlfc3VwcHJlc3NfdHJhY2luZyhWQUxVRSAoKmZ1bmMpKFZBTFUN CiAJdGgtPnRyYWNpbmcgPSAxOw0KICAgICB9DQogDQotICAgIHJhaXNlZCA9IHJiX3RocmVh ZF9yZXNldF9yYWlzZWQodGgpOw0KKyAgICByYWlzZWQgPSByYl90aF9yZXNldF9yYWlzZWQo dGgpOw0KIA0KICAgICBQVVNIX1RBRygpOw0KICAgICBpZiAoKHN0YXRlID0gRVhFQ19UQUco KSkgPT0gMCkgew0KQEAgLTM3ODYsNyArMzgwNSw3IEBAIHJ1Ynlfc3VwcHJlc3NfdHJhY2lu ZyhWQUxVRSAoKmZ1bmMpKFZBTFUNCiAgICAgfQ0KIA0KICAgICBpZiAocmFpc2VkKSB7DQot CXJiX3RocmVhZF9zZXRfcmFpc2VkKHRoKTsNCisJcmJfdGhfc2V0X3JhaXNlZCh0aCk7DQog ICAgIH0NCiAgICAgUE9QX1RBRygpOw0KIA0KQEAgLTM5NzksNyArMzk5OCw3IEBAIHJiX2No ZWNrX2RlYWRsb2NrKHJiX3ZtX3QgKnZtKQ0KIAlwcmludGYoIiVkICVkICVwICVwXG4iLCB2 bS0+bGl2aW5nX3RocmVhZHMtPm51bV9lbnRyaWVzLCB2bS0+c2xlZXBlciwgR0VUX1RIUkVB RCgpLCB2bS0+bWFpbl90aHJlYWQpOw0KIAlzdF9mb3JlYWNoKHZtLT5saXZpbmdfdGhyZWFk cywgZGVidWdfaSwgKHN0X2RhdGFfdCkwKTsNCiAjZW5kaWYNCi0JcmJfdGhyZWFkX3JhaXNl KDIsIGFyZ3YsIHZtLT5tYWluX3RocmVhZCk7DQorCXJiX3RoX3JhaXNlKHZtLT5tYWluX3Ro cmVhZCwgMiwgYXJndik7DQogICAgIH0NCiB9DQogDQpJbmRleDogZXZhbC5jDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQotLS0gZXZhbC5jCSiDioNyg1eDh4OTIDIzNjM5KQ0KKysrIGV2YWwuYwkojeyL xoNSg3OBWykNCkBAIC0zNDEsNyArMzQxLDcgQEAgcmJfbG9uZ2ptcChpbnQgdGFnLCB2b2xh dGlsZSBWQUxVRSBtZXNnKQ0KICAgICBjb25zdCBjaGFyICpmaWxlOw0KICAgICB2b2xhdGls ZSBpbnQgbGluZSA9IDA7DQogDQotICAgIGlmIChyYl90aHJlYWRfc2V0X3JhaXNlZCh0aCkp IHsNCisgICAgaWYgKHJiX3RoX3NldF9yYWlzZWQodGgpKSB7DQogCXRoLT5lcnJpbmZvID0g ZXhjZXB0aW9uX2Vycm9yOw0KIAlKVU1QX1RBRyhUQUdfRkFUQUwpOw0KICAgICB9DQpAQCAt MzkxLDcgKzM5MSw3IEBAIHJiX2xvbmdqbXAoaW50IHRhZywgdm9sYXRpbGUgVkFMVUUgbWVz ZykNCiAJICAgIHRoLT5lcnJpbmZvID0gbWVzZzsNCiAJfQ0KIAllbHNlIGlmIChzdGF0dXMp IHsNCi0JICAgIHJiX3RocmVhZF9yZXNldF9yYWlzZWQodGgpOw0KKwkgICAgcmJfdGhfcmVz ZXRfcmFpc2VkKHRoKTsNCiAJICAgIEpVTVBfVEFHKHN0YXR1cyk7DQogCX0NCiAgICAgfQ0K SW5kZXg6IHNpZ25hbC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gc2lnbmFsLmMJKIOKg3KDV4OH g5MgMjM2MzkpDQorKysgc2lnbmFsLmMJKI3si8aDUoNzgVspDQpAQCAtNjY0LDEyICs2NjQs MTIgQEAgcmJfc2lnbmFsX2V4ZWMocmJfdGhyZWFkX3QgKnRoLCBpbnQgc2lnKQ0KICNpZmRl ZiBTSUdVU1IyDQogCSAgY2FzZSBTSUdVU1IyOg0KICNlbmRpZg0KLQkgICAgcmJfdGhyZWFk X3NpZ25hbF9yYWlzZSh0aCwgc2lnKTsNCisJICAgIHJiX3RoX3NpZ25hbF9yYWlzZSh0aCwg c2lnKTsNCiAJICAgIGJyZWFrOw0KIAl9DQogICAgIH0NCiAgICAgZWxzZSBpZiAoY21kID09 IFF1bmRlZikgew0KLQlyYl90aHJlYWRfc2lnbmFsX2V4aXQodGgpOw0KKwlyYl90aF9zaWdu YWxfZXhpdCh0aCk7DQogICAgIH0NCiAgICAgZWxzZSB7DQogCXNpZ25hbF9leGVjKGNtZCwg c2FmZSwgc2lnKTsNCg0K --------------070201030604090200000804--