From: Yusuke ENDOH Date: 2008-06-11T22:48:46+09:00 Subject: [ruby-dev:35050] Re: deadlock detection for 1.9 ------=_Part_24893_32896088.1213192144689 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Content-Disposition: inline 遠藤です。 2008/06/11 9:18 Yukihiro Matsumoto : > | - スレッドがロック中の mutex が GC されなくなる。 > | loop { Mutex.new.lock } # どんどんメモリを消費する > > これだけはいただけません。weak refなどを使ってなんとかできな > いものでしょうかねぇ。 なんとかできました。変更点: - rb_thread_mark で keeping_mutexes を mark しないようにした。 - mutex_mark で next_mutex を mark しないようにした。 - mutex_free で unlock するようにした。 あと、mutex が lock 状態で放置されるのはおそらくプログラムのバグ なので警告した方がいいのでは、とささださんにコメントを頂きました。 これもやってみました。 $ ./ruby -e 'Thread.new { Mutex.new.lock }.join' warning: mutex # remains to be locked by terminated thread $ ./ruby -e 'loop { Mutex.new.lock; GC.start; sleep 1 }' -e:1: warning: free locked mutex -e:1: warning: free locked mutex -e:1: warning: free locked mutex ^C :16: warning: mutex # remains to be locked by terminated thread -e:1:in `sleep': Interrupt from -e:1:in `block in
' from -e:1:in `loop' from -e:1:in `
' -- Yusuke ENDOH ------=_Part_24893_32896088.1213192144689 Content-Type: text/plain; name=deadlock.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fhbz5pqh0 Content-Disposition: attachment; filename=deadlock.patch SW5kZXg6IHRocmVhZF93aW4zMi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRocmVhZF93aW4zMi5jCShyZXZp c2lvbiAxNzA5NykKKysrIHRocmVhZF93aW4zMi5jCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNyAr MjA0LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLW5hdGl2ZV9zbGVlcChyYl90aHJlYWRfdCAqdGgs IHN0cnVjdCB0aW1ldmFsICp0dikKK25hdGl2ZV9zbGVlcChyYl90aHJlYWRfdCAqdGgsIHN0cnVj dCB0aW1ldmFsICp0diwgaW50IGRlYWRsb2NrYWJsZSkKIHsKICAgICBEV09SRCBtc2VjOwogICAg IGlmICh0dikgewpAQCAtMjE0LDEyICsyMTQsMTkgQEAKIAltc2VjID0gSU5GSU5JVEU7CiAgICAg fQogCisgICAgaWYgKCF0diAmJiBkZWFkbG9ja2FibGUpIHsKKwl0aC0+c3RhdHVzID0gVEhSRUFE X1NUT1BQRURfRk9SRVZFUjsKKwl0aC0+dm0tPnNsZWVwZXIrKzsKKwlyYl9jaGVja19kZWFkbG9j ayh0aC0+dm0pOworICAgIH0KKyAgICBlbHNlIHsKKwl0aC0+c3RhdHVzID0gVEhSRUFEX1NUT1BQ RUQ7CisgICAgfQogICAgIEdWTF9VTkxPQ0tfQkVHSU4oKTsKICAgICB7CiAJRFdPUkQgcmV0Owog CWludCBzdGF0dXMgPSB0aC0+c3RhdHVzOwogCi0JdGgtPnN0YXR1cyA9IFRIUkVBRF9TVE9QUEVE OwogCXRoLT51bmJsb2NrLmZ1bmMgPSB1YmZfaGFuZGxlOwogCXRoLT51bmJsb2NrLmFyZyA9IHRo OwogCkBAIC0yMzQsOSArMjQxLDEwIEBACiAKIAl0aC0+dW5ibG9jay5mdW5jID0gMDsKIAl0aC0+ dW5ibG9jay5hcmcgPSAwOwotCXRoLT5zdGF0dXMgPSBzdGF0dXM7CiAgICAgfQogICAgIEdWTF9V TkxPQ0tfRU5EKCk7CisgICAgdGgtPnN0YXR1cyA9IHN0YXR1czsKKyAgICBpZiAoIXR2ICYmIGRl YWRsb2NrYWJsZSkgdGgtPnZtLT5zbGVlcGVyKys7CiAgICAgUlVCWV9WTV9DSEVDS19JTlRTKCk7 CiB9CiAKSW5kZXg6IHRocmVhZF9wdGhyZWFkLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdGhyZWFkX3B0aHJl YWQuYwkocmV2aXNpb24gMTcwOTcpCisrKyB0aHJlYWRfcHRocmVhZC5jCSh3b3JraW5nIGNvcHkp CkBAIC00MDIsNyArNDAyLDcgQEAKICNlbmRpZgogCiBzdGF0aWMgdm9pZAotbmF0aXZlX3NsZWVw KHJiX3RocmVhZF90ICp0aCwgc3RydWN0IHRpbWV2YWwgKnR2KQorbmF0aXZlX3NsZWVwKHJiX3Ro cmVhZF90ICp0aCwgc3RydWN0IHRpbWV2YWwgKnR2LCBpbnQgZGVhZGxvY2thYmxlKQogewogICAg IGludCBwcmV2X3N0YXR1cyA9IHRoLT5zdGF0dXM7CiAgICAgc3RydWN0IHRpbWVzcGVjIHRzOwpA QCAtNDE4LDcgKzQxOCwxNCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgdGgtPnN0YXR1cyA9 IFRIUkVBRF9TVE9QUEVEOworICAgIGlmICghdHYgJiYgZGVhZGxvY2thYmxlKSB7CisJdGgtPnN0 YXR1cyA9IFRIUkVBRF9TVE9QUEVEX0ZPUkVWRVI7CisJdGgtPnZtLT5zbGVlcGVyKys7CisJcmJf Y2hlY2tfZGVhZGxvY2sodGgtPnZtKTsKKyAgICB9CisgICAgZWxzZSB7CisJdGgtPnN0YXR1cyA9 IFRIUkVBRF9TVE9QUEVEOworICAgIH0KIAogICAgIHRocmVhZF9kZWJ1ZygibmF0aXZlX3NsZWVw ICVsZFxuIiwgdHYgPyB0di0+dHZfc2VjIDogLTEpOwogICAgIEdWTF9VTkxPQ0tfQkVHSU4oKTsK QEAgLTQ1NSw5ICs0NjIsMTAgQEAKIAl0aC0+dW5ibG9jay5hcmcgPSAwOwogCiAJcHRocmVhZF9t dXRleF91bmxvY2soJnRoLT5pbnRlcnJ1cHRfbG9jayk7Ci0JdGgtPnN0YXR1cyA9IHByZXZfc3Rh dHVzOwogICAgIH0KICAgICBHVkxfVU5MT0NLX0VORCgpOworICAgIHRoLT5zdGF0dXMgPSBwcmV2 X3N0YXR1czsKKyAgICBpZiAoIXR2ICYmIGRlYWRsb2NrYWJsZSkgdGgtPnZtLT5zbGVlcGVyLS07 CiAgICAgUlVCWV9WTV9DSEVDS19JTlRTKCk7CiAKICAgICB0aHJlYWRfZGVidWcoIm5hdGl2ZV9z bGVlcCBkb25lXG4iKTsKSW5kZXg6IGJvb3RzdHJhcHRlc3QvdGVzdF90aHJlYWQucmIKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gYm9vdHN0cmFwdGVzdC90ZXN0X3RocmVhZC5yYgkocmV2aXNpb24gMTcwOTcpCisr KyBib290c3RyYXB0ZXN0L3Rlc3RfdGhyZWFkLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIsMyAr MzAyLDU2IEBACiBhc3NlcnRfbm9ybWFsX2V4aXQgJXF7CiAgIFRocmVhZC5uZXcoImZvbyIsICZP YmplY3QubWV0aG9kKDpjbGFzc19ldmFsKSkuam9pbgogfSwgJ1tydWJ5LWRldjozNDEyOF0nCisK K2Fzc2VydF9lcXVhbCAnb2snLCAlcXsKKyAgYmVnaW4KKyAgICBUaHJlYWQubmV3IHsgVGhyZWFk LnN0b3AgfQorICAgIFRocmVhZC5zdG9wCisgICAgOm5nCisgIHJlc2N1ZSBFeGNlcHRpb24KKyAg ICA6b2sKKyAgZW5kCit9CisKK2Fzc2VydF9lcXVhbCAnb2snLCAlcXsKKyAgYmVnaW4KKyAgICBt MSwgbTIgPSBNdXRleC5uZXcsIE11dGV4Lm5ldworICAgIFRocmVhZC5uZXcgeyBtMS5sb2NrOyBz bGVlcCAxOyBtMi5sb2NrIH0KKyAgICBtMi5sb2NrOyBzbGVlcCAxOyBtMS5sb2NrCisgICAgOm5n CisgIHJlc2N1ZSBFeGNlcHRpb24KKyAgICA6b2sKKyAgZW5kCit9CisKK2Fzc2VydF9lcXVhbCAn b2snLCAlcXsKKyAgbSA9IE11dGV4Lm5ldworICBUaHJlYWQubmV3IHsgbS5sb2NrIH07IHNsZWVw IDE7IG0ubG9jaworICA6b2sKK30KKworYXNzZXJ0X2VxdWFsICdvaycsICVxeworICBtID0gTXV0 ZXgubmV3CisgIFRocmVhZC5uZXcgeyBtLmxvY2sgfTsgbS5sb2NrCisgIDpvaworfQorCithc3Nl cnRfZXF1YWwgJ29rJywgJXF7CisgIG0gPSBNdXRleC5uZXcKKyAgVGhyZWFkLm5ldyB7IG0ubG9j ayB9LmpvaW47IG0ubG9jaworICA6b2sKK30KKworYXNzZXJ0X2VxdWFsICdvaycsICVxeworICBt ID0gTXV0ZXgubmV3CisgIFRocmVhZC5uZXcgeyBtLmxvY2s7IHNsZWVwIDIgfQorICBzbGVlcCAx OyBtLmxvY2sKKyAgOm9rCit9CisKK2Fzc2VydF9lcXVhbCAnb2snLCAlcXsKKyAgbSA9IE11dGV4 Lm5ldworICBUaHJlYWQubmV3IHsgbS5sb2NrOyBzbGVlcCAyOyBtLnVubG9jayB9CisgIHNsZWVw IDE7IG0ubG9jaworICA6b2sKK30KSW5kZXg6IHZtX2NvcmUuaAo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB2bV9j b3JlLmgJKHJldmlzaW9uIDE3MDk3KQorKysgdm1fY29yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z MDIsNiArMzAyLDcgQEAKICAgICBpbnQgcnVubmluZzsKICAgICBpbnQgdGhyZWFkX2Fib3J0X29u X2V4Y2VwdGlvbjsKICAgICB1bnNpZ25lZCBsb25nIHRyYWNlX2ZsYWc7CisgICAgdm9sYXRpbGUg aW50IHNsZWVwZXI7CiAKICAgICAvKiBvYmplY3QgbWFuYWdlbWVudCAqLwogICAgIFZBTFVFIG1h cmtfb2JqZWN0X2FyeTsKQEAgLTM2MCw2ICszNjEsNyBAQAogICAgIFRIUkVBRF9UT19LSUxMLAog ICAgIFRIUkVBRF9SVU5OQUJMRSwKICAgICBUSFJFQURfU1RPUFBFRCwKKyAgICBUSFJFQURfU1RP UFBFRF9GT1JFVkVSLAogICAgIFRIUkVBRF9LSUxMRUQsCiB9OwogCkBAIC00MjksNiArNDMxLDgg QEAKICAgICBpbnQgaW50ZXJydXB0X2ZsYWc7CiAgICAgcmJfdGhyZWFkX2xvY2tfdCBpbnRlcnJ1 cHRfbG9jazsKICAgICBzdHJ1Y3QgcmJfdW5ibG9ja19jYWxsYmFjayB1bmJsb2NrOworICAgIFZB TFVFIGxvY2tpbmdfbXV0ZXg7CisgICAgVkFMVUUga2VlcGluZ19tdXRleGVzOwogCiAgICAgc3Ry dWN0IHJiX3ZtX3RhZyAqdGFnOwogICAgIHN0cnVjdCByYl92bV90cmFwX3RhZyAqdHJhcF90YWc7 CkluZGV4OiB0aHJlYWQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0aHJlYWQuYwkocmV2aXNpb24gMTcwOTcp CisrKyB0aHJlYWQuYwkod29ya2luZyBjb3B5KQpAQCAtNTcsMTEgKzU3LDE0IEBACiAKIHN0YXRp YyB2b2lkIHNsZWVwX3RpbWV2YWwocmJfdGhyZWFkX3QgKnRoLCBzdHJ1Y3QgdGltZXZhbCB0aW1l KTsKIHN0YXRpYyB2b2lkIHNsZWVwX3dhaXRfZm9yX2ludGVycnVwdChyYl90aHJlYWRfdCAqdGgs IGRvdWJsZSBzbGVlcHNlYyk7Ci1zdGF0aWMgdm9pZCBzbGVlcF9mb3JldmVyKHJiX3RocmVhZF90 ICp0aCk7CitzdGF0aWMgdm9pZCBzbGVlcF9mb3JldmVyKHJiX3RocmVhZF90ICp0aCwgaW50IG5v ZGVhZGxvY2spOwogc3RhdGljIGRvdWJsZSB0aW1lb2ZkYXkodm9pZCk7CiBzdHJ1Y3QgdGltZXZh bCByYl90aW1lX2ludGVydmFsKFZBTFVFKTsKIHN0YXRpYyBpbnQgcmJfdGhyZWFkX2RlYWQocmJf dGhyZWFkX3QgKnRoKTsKIAorc3RhdGljIHZvaWQgcmJfbXV0ZXhfdW5sb2NrX2FsbChWQUxVRSk7 CitzdGF0aWMgdm9pZCByYl9jaGVja19kZWFkbG9jayhyYl92bV90ICp2bSk7CisKIHZvaWQgcmJf c2lnbmFsX2V4ZWMocmJfdGhyZWFkX3QgKnRoLCBpbnQgc2lnKTsKIHZvaWQgcmJfZGlzYWJsZV9p bnRlcnJ1cHQodm9pZCk7CiAKQEAgLTkzLDEyICs5NiwxMiBAQAogICByYl90aHJlYWRfc2V0X2N1 cnJlbnQoX3RoX3N0b3JlZCk7IFwKIH0gd2hpbGUoMCkKIAotI2RlZmluZSBCTE9DS0lOR19SRUdJ T04oZXhlYywgdWJmLCB1YmZhcmcpIGRvIHsgXAorI2RlZmluZSBCTE9DS0lOR19SRUdJT04oZXhl YywgdWJmLCB1YmZhcmcsIHN0b3BwZWQpIGRvIHsgXAogICAgIHJiX3RocmVhZF90ICpfX3RoID0g R0VUX1RIUkVBRCgpOyBcCiAgICAgaW50IF9fcHJldl9zdGF0dXMgPSBfX3RoLT5zdGF0dXM7IFwK ICAgICBzdHJ1Y3QgcmJfdW5ibG9ja19jYWxsYmFjayBfX29sZHViZjsgXAogICAgIHNldF91bmJs b2NrX2Z1bmN0aW9uKF9fdGgsIHViZiwgdWJmYXJnLCAmX19vbGR1YmYpOyBcCi0gICAgX190aC0+ c3RhdHVzID0gVEhSRUFEX1NUT1BQRUQ7IFwKKyAgICBpZiAoc3RvcHBlZCkgX190aC0+c3RhdHVz ID0gVEhSRUFEX1NUT1BQRUQ7IFwKICAgICB0aHJlYWRfZGVidWcoImVudGVyIGJsb2NraW5nIHJl Z2lvbiAoJXApXG4iLCBfX3RoKTsgXAogICAgIEdWTF9VTkxPQ0tfQkVHSU4oKTsge1wKIAkgICAg ZXhlYzsgXApAQCAtMTA3LDEwICsxMTAsOSBAQAogICAgIHRocmVhZF9kZWJ1ZygibGVhdmUgYmxv Y2tpbmcgcmVnaW9uICglcClcbiIsIF9fdGgpOyBcCiAgICAgcmVtb3ZlX3NpZ25hbF90aHJlYWRf bGlzdChfX3RoKTsgXAogICAgIHJlc2V0X3VuYmxvY2tfZnVuY3Rpb24oX190aCwgJl9fb2xkdWJm KTsgXAotICAgIGlmIChfX3RoLT5zdGF0dXMgPT0gVEhSRUFEX1NUT1BQRUQpIHsgXAorICAgIGlm IChzdG9wcGVkICYmIF9fdGgtPnN0YXR1cyA9PSBUSFJFQURfU1RPUFBFRCkgeyBcCiAJX190aC0+ c3RhdHVzID0gX19wcmV2X3N0YXR1czsgXAogICAgIH0gXAotICAgIFJVQllfVk1fQ0hFQ0tfSU5U UygpOyBcCiB9IHdoaWxlKDApCiAKICNpZiBUSFJFQURfREVCVUcKQEAgLTI2Myw2ICsyNjUsMTEg QEAKIAlyYl9idWcoInJiX3RocmVhZF90ZXJtaW5hdGVfYWxsOiBjYWxsZWQgYnkgY2hpbGQgdGhy ZWFkICglcCwgJXApIiwgdm0tPm1haW5fdGhyZWFkLCB0aCk7CiAgICAgfQogCisgICAgLyogdW5s b2NrIGFsbCBsb2NraW5nIG11dGV4ZXMgKi8KKyAgICBpZiAodGgtPmtlZXBpbmdfbXV0ZXhlcykg eworCXJiX211dGV4X3VubG9ja19hbGwodGgtPmtlZXBpbmdfbXV0ZXhlcyk7CisgICAgfQorCiAg ICAgdGhyZWFkX2RlYnVnKCJyYl90aHJlYWRfdGVybWluYXRlX2FsbCAobWFpbiB0aHJlYWQ6ICVw KVxuIiwgdGgpOwogICAgIHN0X2ZvcmVhY2godm0tPmxpdmluZ190aHJlYWRzLCB0ZXJtaW5hdGVf aSwgKHN0X2RhdGFfdCl0aCk7CiAKQEAgLTM2MSw2ICszNjgsMTggQEAKIAl9CiAJVEhfUE9QX1RB RygpOwogCisJLyogbG9ja2luZ19tdXRleCBtdXN0IGJlIFFmYWxzZSAqLworCWlmICh0aC0+bG9j a2luZ19tdXRleCAhPSBRZmFsc2UpIHsKKwkgICAgcmJfYnVnKCJ0aHJlYWRfc3RhcnRfZnVuY18y OiBsb2NraW5nX211dGV4IG11c3QgYmUgTlVMTCAoJXA6JWxkKSIsIHRoLCB0aC0+bG9ja2luZ19t dXRleCk7CisJfQorCisJLyogdW5sb2NrIGFsbCBsb2NraW5nIG11dGV4ZXMgKi8KKwlpZiAodGgt PmtlZXBpbmdfbXV0ZXhlcykgeworCSAgICByYl9tdXRleF91bmxvY2tfYWxsKHRoLT5rZWVwaW5n X211dGV4ZXMpOworCSAgICB0aC0+a2VlcGluZ19tdXRleGVzID0gUWZhbHNlOworCX0KKworCS8q IGRlbGV0ZSBzZWxmIGZyb20gbGl2aW5nX3RocmVhZHMgKi8KIAlzdF9kZWxldGVfd3JhcCh0aC0+ dm0tPmxpdmluZ190aHJlYWRzLCB0aC0+c2VsZik7CiAKIAkvKiB3YWtlIHVwIGpvaW5uaW5nIHRo cmVhZHMgKi8KQEAgLTM3MSw2ICszOTAsNyBAQAogCSAgICBqb2luX3RoID0gam9pbl90aC0+am9p bl9saXN0X25leHQ7CiAJfQogCXN0X2RlbGV0ZV93cmFwKHRoLT52bS0+bGl2aW5nX3RocmVhZHMs IHRoLT5zZWxmKTsKKwlpZiAodGggIT0gbWFpbl90aCkgcmJfY2hlY2tfZGVhZGxvY2sodGgtPnZt KTsKIAogCWlmICghdGgtPnJvb3RfZmliZXIpIHsKIAkgICAgcmJfdGhyZWFkX3JlY3ljbGVfc3Rh Y2tfcmVsZWFzZSh0aC0+c3RhY2spOwpAQCAtNTExLDcgKzUzMSw3IEBACiAKICAgICB3aGlsZSAo dGFyZ2V0X3RoLT5zdGF0dXMgIT0gVEhSRUFEX0tJTExFRCkgewogCWlmIChwLT5mb3JldmVyKSB7 Ci0JICAgIHNsZWVwX2ZvcmV2ZXIodGgpOworCSAgICBzbGVlcF9mb3JldmVyKHRoLCAxKTsKIAl9 CiAJZWxzZSB7CiAJICAgIG5vdyA9IHRpbWVvZmRheSgpOwpAQCAtNjY3LDI0ICs2ODcsMzEgQEAK IH0KIAogc3RhdGljIHZvaWQKLXNsZWVwX2ZvcmV2ZXIocmJfdGhyZWFkX3QgKnRoKQorc2xlZXBf Zm9yZXZlcihyYl90aHJlYWRfdCAqdGgsIGludCBkZWFkbG9ja2FibGUpCiB7Ci0gICAgbmF0aXZl X3NsZWVwKHRoLCAwKTsKKyAgICBuYXRpdmVfc2xlZXAodGgsIDAsIGRlYWRsb2NrYWJsZSk7CiB9 CiAKIHN0YXRpYyB2b2lkCiBzbGVlcF90aW1ldmFsKHJiX3RocmVhZF90ICp0aCwgc3RydWN0IHRp bWV2YWwgdHYpCiB7Ci0gICAgbmF0aXZlX3NsZWVwKHRoLCAmdHYpOworICAgIG5hdGl2ZV9zbGVl cCh0aCwgJnR2LCAwKTsKIH0KIAogdm9pZAogcmJfdGhyZWFkX3NsZWVwX2ZvcmV2ZXIoKQogewog ICAgIHRocmVhZF9kZWJ1ZygicmJfdGhyZWFkX3NsZWVwX2ZvcmV2ZXJcbiIpOwotICAgIHNsZWVw X2ZvcmV2ZXIoR0VUX1RIUkVBRCgpKTsKKyAgICBzbGVlcF9mb3JldmVyKEdFVF9USFJFQUQoKSwg MCk7CiB9CiAKK3N0YXRpYyB2b2lkCityYl90aHJlYWRfc2xlZXBfZGVhZGx5KCkKK3sKKyAgICB0 aHJlYWRfZGVidWcoInJiX3RocmVhZF9zbGVlcF9kZWFkbHlcbiIpOworICAgIHNsZWVwX2ZvcmV2 ZXIoR0VUX1RIUkVBRCgpLCAxKTsKK30KKwogc3RhdGljIGRvdWJsZQogdGltZW9mZGF5KHZvaWQp CiB7CkBAIC03ODIsNyArODA5LDggQEAKIAogICAgIEJMT0NLSU5HX1JFR0lPTih7CiAJdmFsID0g ZnVuYyhkYXRhMSk7Ci0gICAgfSwgdWJmLCBkYXRhMik7CisgICAgfSwgdWJmLCBkYXRhMiwgMSk7 CisgICAgUlVCWV9WTV9DSEVDS19JTlRTKCk7CiAKICAgICByZXR1cm4gdmFsOwogfQpAQCAtMTEy OCw3ICsxMTU2LDcgQEAKIAlyYl9yYWlzZShyYl9lVGhyZWFkRXJyb3IsCiAJCSAic3RvcHBpbmcg b25seSB0aHJlYWRcblx0bm90ZTogdXNlIHNsZWVwIHRvIHN0b3AgZm9yZXZlciIpOwogICAgIH0K LSAgICByYl90aHJlYWRfc2xlZXBfZm9yZXZlcigpOworICAgIHJiX3RocmVhZF9zbGVlcF9kZWFk bHkoKTsKICAgICByZXR1cm4gUW5pbDsKIH0KIApAQCAtMTE0Miw2ICsxMTcwLDcgQEAKICAgICBz d2l0Y2ggKHRoLT5zdGF0dXMpIHsKICAgICAgIGNhc2UgVEhSRUFEX1JVTk5BQkxFOgogICAgICAg Y2FzZSBUSFJFQURfU1RPUFBFRDoKKyAgICAgIGNhc2UgVEhSRUFEX1NUT1BQRURfRk9SRVZFUjoK ICAgICAgIGNhc2UgVEhSRUFEX1RPX0tJTEw6CiAJcmJfYXJ5X3B1c2goYXJ5LCB0aC0+c2VsZik7 CiAgICAgICBkZWZhdWx0OgpAQCAtMTMzNiw2ICsxMzY1LDcgQEAKICAgICAgIGNhc2UgVEhSRUFE X1JVTk5BQkxFOgogCXJldHVybiAicnVuIjsKICAgICAgIGNhc2UgVEhSRUFEX1NUT1BQRUQ6Cisg ICAgICBjYXNlIFRIUkVBRF9TVE9QUEVEX0ZPUkVWRVI6CiAJcmV0dXJuICJzbGVlcCI7CiAgICAg ICBjYXNlIFRIUkVBRF9UT19LSUxMOgogCXJldHVybiAiYWJvcnRpbmciOwpAQCAtMTQzNSw3ICsx NDY1LDcgQEAKIAogICAgIGlmIChyYl90aHJlYWRfZGVhZCh0aCkpCiAJcmV0dXJuIFF0cnVlOwot ICAgIGlmICh0aC0+c3RhdHVzID09IFRIUkVBRF9TVE9QUEVEKQorICAgIGlmICh0aC0+c3RhdHVz ID09IFRIUkVBRF9TVE9QUEVEIHx8IHRoLT5zdGF0dXMgPT0gVEhSRUFEX1NUT1BQRURfRk9SRVZF UikKIAlyZXR1cm4gUXRydWU7CiAgICAgcmV0dXJuIFFmYWxzZTsKIH0KQEAgLTE4NzUsMTQgKzE5 MDUsMTYgQEAKIAkJICAgIGlmIChleGNlcHQpICpleGNlcHQgPSBvcmlnX2V4Y2VwdDsKIAkJICAg IHdhaXQgPSAmd2FpdF8xMDBtczsKIAkJfSB3aGlsZSAoX190aC0+aW50ZXJydXB0X2ZsYWcgPT0g MCAmJiAodGltZW91dCA9PSAwIHx8IHN1YnN0KHRpbWVvdXQsICZ3YWl0XzEwMG1zKSkpOwotCSAg ICB9LCAwLCAwKTsKKwkgICAgfSwgMCwgMCwgMSk7CisJICAgIFJVQllfVk1fQ0hFQ0tfSU5UUygp OwogCX0gd2hpbGUgKHJlc3VsdCA9PSAwICYmICh0aW1lb3V0ID09IDAgfHwgc3Vic3QodGltZW91 dCwgJndhaXRfMTAwbXMpKSk7CiAgICAgfQogI2Vsc2UKICAgICBCTE9DS0lOR19SRUdJT04oewog CXJlc3VsdCA9IHNlbGVjdChuLCByZWFkLCB3cml0ZSwgZXhjZXB0LCB0aW1lb3V0KTsKIAlpZiAo cmVzdWx0IDwgMCkgbGVycm5vID0gZXJybm87Ci0gICAgfSwgdWJmX3NlbGVjdCwgR0VUX1RIUkVB RCgpKTsKKyAgICB9LCB1YmZfc2VsZWN0LCBHRVRfVEhSRUFEKCksIDEpOworICAgIFJVQllfVk1f Q0hFQ0tfSU5UUygpOwogI2VuZGlmCiAKICAgICBlcnJubyA9IGxlcnJubzsKQEAgLTIzMTksMTIg KzIzNTEsMTUgQEAKICAgICByYl90aHJlYWRfbG9ja190IGxvY2s7CiAgICAgcmJfdGhyZWFkX2Nv bmRfdCBjb25kOwogICAgIHJiX3RocmVhZF90IHZvbGF0aWxlICp0aDsKLSAgICB2b2xhdGlsZSBp bnQgY29uZF93YWl0aW5nOworICAgIHZvbGF0aWxlIGludCBjb25kX3dhaXRpbmcsIGNvbmRfbm90 aWZpZWQ7CisgICAgVkFMVUUgbmV4dF9tdXRleDsKIH0gbXV0ZXhfdDsKIAogI2RlZmluZSBHZXRN dXRleFB0cihvYmosIHRvYmopIFwKICAgRGF0YV9HZXRfU3RydWN0KG9iaiwgbXV0ZXhfdCwgdG9i aikKIAorc3RhdGljIGNvbnN0IGNoYXIgKm11dGV4X3VubG9jayhtdXRleF90ICptdXRleCk7CisK IHN0YXRpYyB2b2lkCiBtdXRleF9tYXJrKHZvaWQgKnB0cikKIHsKQEAgLTIzNDEsNiArMjM3Niwx MCBAQAogewogICAgIGlmIChwdHIpIHsKIAltdXRleF90ICptdXRleCA9IHB0cjsKKwlpZiAobXV0 ZXgtPnRoKSB7CisJICAgIHJiX3dhcm4oImZyZWUgbG9ja2VkIG11dGV4Iik7CisJICAgIG11dGV4 X3VubG9jayhtdXRleCk7CisJfQogCW5hdGl2ZV9tdXRleF9kZXN0cm95KCZtdXRleC0+bG9jayk7 CiAJbmF0aXZlX2NvbmRfZGVzdHJveSgmbXV0ZXgtPmNvbmQpOwogICAgIH0KQEAgLTIzOTEsNiAr MjQzMCwxNyBAQAogICAgIHJldHVybiBtdXRleC0+dGggPyBRdHJ1ZSA6IFFmYWxzZTsKIH0KIAor c3RhdGljIHZvaWQKK211dGV4X2xvY2tlZChyYl90aHJlYWRfdCAqdGgsIFZBTFVFIHNlbGYpCit7 CisgICAgaWYgKHRoLT5rZWVwaW5nX211dGV4ZXMpIHsKKwltdXRleF90ICptdXRleDsKKwlHZXRN dXRleFB0cihzZWxmLCBtdXRleCk7CisJbXV0ZXgtPm5leHRfbXV0ZXggPSB0aC0+a2VlcGluZ19t dXRleGVzOworICAgIH0KKyAgICB0aC0+a2VlcGluZ19tdXRleGVzID0gc2VsZjsKK30KKwogLyoK ICAqIGNhbGwtc2VxOgogICogICAgbXV0ZXgudHJ5X2xvY2sgID0+IHRydWUgb3IgZmFsc2UKQEAg LTI0MTMsNiArMjQ2Myw4IEBACiAgICAgaWYgKG11dGV4LT50aCA9PSAwKSB7CiAJbXV0ZXgtPnRo ID0gR0VUX1RIUkVBRCgpOwogCWxvY2tlZCA9IFF0cnVlOworCisJbXV0ZXhfbG9ja2VkKEdFVF9U SFJFQUQoKSwgc2VsZik7CiAgICAgfQogICAgIG5hdGl2ZV9tdXRleF91bmxvY2soJm11dGV4LT5s b2NrKTsKIApAQCAtMjQyMCwxNyArMjQ3MiwyMyBAQAogfQogCiBzdGF0aWMgaW50Ci1sb2NrX2Z1 bmMocmJfdGhyZWFkX3QgKnRoLCBtdXRleF90ICptdXRleCkKK2xvY2tfZnVuYyhyYl90aHJlYWRf dCAqdGgsIG11dGV4X3QgKm11dGV4LCBpbnQgbGFzdF90aHJlYWQpCiB7Ci0gICAgaW50IGludGVy cnVwdGVkID0gUWZhbHNlOworICAgIGludCBpbnRlcnJ1cHRlZCA9IDA7CiAKICAgICBuYXRpdmVf bXV0ZXhfbG9jaygmbXV0ZXgtPmxvY2spOwogICAgIHdoaWxlIChtdXRleC0+dGggfHwgKG11dGV4 LT50aCA9IHRoLCAwKSkgeworCWlmIChsYXN0X3RocmVhZCkgeworCSAgICBpbnRlcnJ1cHRlZCA9 IDI7CisJICAgIGJyZWFrOworCX0KKwogCW11dGV4LT5jb25kX3dhaXRpbmcrKzsKIAluYXRpdmVf Y29uZF93YWl0KCZtdXRleC0+Y29uZCwgJm11dGV4LT5sb2NrKTsKKwltdXRleC0+Y29uZF9ub3Rp ZmllZC0tOwogCi0JaWYgKHRoLT5pbnRlcnJ1cHRfZmxhZykgewotCSAgICBpbnRlcnJ1cHRlZCA9 IFF0cnVlOworCWlmIChSVUJZX1ZNX0lOVEVSUlVQVEVEKHRoKSkgeworCSAgICBpbnRlcnJ1cHRl ZCA9IDE7CiAJICAgIGJyZWFrOwogCX0KICAgICB9CkBAIC0yNDQ1LDYgKzI1MDMsNyBAQAogICAg IG5hdGl2ZV9tdXRleF9sb2NrKCZtdXRleC0+bG9jayk7CiAgICAgaWYgKG11dGV4LT5jb25kX3dh aXRpbmcgPiAwKSB7CiAJbmF0aXZlX2NvbmRfYnJvYWRjYXN0KCZtdXRleC0+Y29uZCk7CisJbXV0 ZXgtPmNvbmRfbm90aWZpZWQgPSBtdXRleC0+Y29uZF93YWl0aW5nOwogCW11dGV4LT5jb25kX3dh aXRpbmcgPSAwOwogICAgIH0KICAgICBuYXRpdmVfbXV0ZXhfdW5sb2NrKCZtdXRleC0+bG9jayk7 CkBAIC0yNDY3LDExICsyNTI2LDMwIEBACiAKIAl3aGlsZSAobXV0ZXgtPnRoICE9IHRoKSB7CiAJ ICAgIGludCBpbnRlcnJ1cHRlZDsKKwkgICAgaW50IHByZXZfc3RhdHVzID0gdGgtPnN0YXR1czsK KwkgICAgaW50IGxhc3RfdGhyZWFkID0gMDsKIAorCSAgICB0aC0+bG9ja2luZ19tdXRleCA9IHNl bGY7CisJICAgIHRoLT5zdGF0dXMgPSBUSFJFQURfU1RPUFBFRF9GT1JFVkVSOworCSAgICB0aC0+ dm0tPnNsZWVwZXIrKzsKKwkgICAgaWYgKHRoLT52bS0+bGl2aW5nX3RocmVhZHMtPm51bV9lbnRy aWVzID09IHRoLT52bS0+c2xlZXBlcikgeworCQlsYXN0X3RocmVhZCA9IDE7CisJICAgIH0KKwog CSAgICBCTE9DS0lOR19SRUdJT04oewotCQlpbnRlcnJ1cHRlZCA9IGxvY2tfZnVuYyh0aCwgbXV0 ZXgpOwotCSAgICB9LCBsb2NrX2ludGVycnVwdCwgbXV0ZXgpOworCQlpbnRlcnJ1cHRlZCA9IGxv Y2tfZnVuYyh0aCwgbXV0ZXgsIGxhc3RfdGhyZWFkKTsKKwkgICAgfSwgbG9ja19pbnRlcnJ1cHQs IG11dGV4LCAwKTsKIAorCSAgICB0aC0+bG9ja2luZ19tdXRleCA9IFFmYWxzZTsKKwkgICAgaWYg KGludGVycnVwdGVkID09IDIpIHsKKwkJcmJfY2hlY2tfZGVhZGxvY2sodGgtPnZtKTsKKwkJUlVC WV9WTV9TRVRfVElNRVJfSU5URVJSVVBUKHRoKTsKKwkgICAgfQorCSAgICB0aC0+c3RhdHVzID0g cHJldl9zdGF0dXM7CisJICAgIHRoLT52bS0+c2xlZXBlci0tOworCisJICAgIGlmIChtdXRleC0+ dGggPT0gdGgpIG11dGV4X2xvY2tlZCh0aCwgc2VsZik7CisKIAkgICAgaWYgKGludGVycnVwdGVk KSB7CiAJCVJVQllfVk1fQ0hFQ0tfSU5UUygpOwogCSAgICB9CkBAIC0yNDgwLDE5ICsyNTU4LDEy IEBACiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLS8qCi0gKiBjYWxsLXNlcToKLSAqICAgIG11dGV4 LnVubG9jayAgICA9PiBzZWxmCi0gKgotICogUmVsZWFzZXMgdGhlIGxvY2suCi0gKiBSYWlzZXMg K1RocmVhZEVycm9yKyBpZiArbXV0ZXgrIHdhc24ndCBsb2NrZWQgYnkgdGhlIGN1cnJlbnQgdGhy ZWFkLgotICovCi1WQUxVRQotcmJfbXV0ZXhfdW5sb2NrKFZBTFVFIHNlbGYpCitzdGF0aWMgY29u c3QgY2hhciAqCittdXRleF91bmxvY2sobXV0ZXhfdCAqbXV0ZXgpCiB7Ci0gICAgbXV0ZXhfdCAq bXV0ZXg7CiAgICAgY29uc3QgY2hhciAqZXJyID0gTlVMTDsKLSAgICBHZXRNdXRleFB0cihzZWxm LCBtdXRleCk7CisgICAgcmJfdGhyZWFkX3QgKnRoID0gR0VUX1RIUkVBRCgpOworICAgIG11dGV4 X3QgKnRoX211dGV4OwogCiAgICAgbmF0aXZlX211dGV4X2xvY2soJm11dGV4LT5sb2NrKTsKIApA QCAtMjUxMywxNSArMjU4NCw2OCBAQAogCiAgICAgbmF0aXZlX211dGV4X3VubG9jaygmbXV0ZXgt PmxvY2spOwogCisgICAgaWYgKCFlcnIpIHsKKwlHZXRNdXRleFB0cih0aC0+a2VlcGluZ19tdXRl eGVzLCB0aF9tdXRleCk7CisJaWYgKHRoX211dGV4ID09IG11dGV4KSB7CisJICAgIHRoLT5rZWVw aW5nX211dGV4ZXMgPSBtdXRleC0+bmV4dF9tdXRleDsKKwl9CisJZWxzZSB7CisJICAgIHdoaWxl ICgxKSB7CisJCW11dGV4X3QgKnRtcF9tdXRleDsKKwkJR2V0TXV0ZXhQdHIodGhfbXV0ZXgtPm5l eHRfbXV0ZXgsIHRtcF9tdXRleCk7CisJCWlmICh0bXBfbXV0ZXggPT0gbXV0ZXgpIHsKKwkJICAg IHRoX211dGV4LT5uZXh0X211dGV4ID0gdG1wX211dGV4LT5uZXh0X211dGV4OworCQkgICAgYnJl YWs7CisJCX0KKwkJdGhfbXV0ZXggPSB0bXBfbXV0ZXg7CisJICAgIH0KKwl9CisJbXV0ZXgtPm5l eHRfbXV0ZXggPSBRZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIGVycjsKK30KKworLyoKKyAq IGNhbGwtc2VxOgorICogICAgbXV0ZXgudW5sb2NrICAgID0+IHNlbGYKKyAqCisgKiBSZWxlYXNl cyB0aGUgbG9jay4KKyAqIFJhaXNlcyArVGhyZWFkRXJyb3IrIGlmICttdXRleCsgd2Fzbid0IGxv Y2tlZCBieSB0aGUgY3VycmVudCB0aHJlYWQuCisgKi8KK1ZBTFVFCityYl9tdXRleF91bmxvY2so VkFMVUUgc2VsZikKK3sKKyAgICBjb25zdCBjaGFyICplcnI7CisgICAgbXV0ZXhfdCAqbXV0ZXg7 CisgICAgR2V0TXV0ZXhQdHIoc2VsZiwgbXV0ZXgpOworCisgICAgZXJyID0gbXV0ZXhfdW5sb2Nr KG11dGV4KTsKICAgICBpZiAoZXJyKSByYl9yYWlzZShyYl9lVGhyZWFkRXJyb3IsIGVycik7CiAK ICAgICByZXR1cm4gc2VsZjsKIH0KIAorc3RhdGljIHZvaWQKK3JiX211dGV4X3VubG9ja19hbGwo VkFMVUUgbXV0ZXhlcykKK3sKKyAgICBjb25zdCBjaGFyICplcnI7CisgICAgbXV0ZXhfdCAqbXV0 ZXg7CisKKyAgICB3aGlsZSAobXV0ZXhlcykgeworCUdldE11dGV4UHRyKG11dGV4ZXMsIG11dGV4 KTsKKwlyYl93YXJuKCJtdXRleCAjPCVzOiVwPiByZW1haW5zIHRvIGJlIGxvY2tlZCBieSB0ZXJt aW5hdGVkIHRocmVhZCIsCisJCXJiX29ial9jbGFzc25hbWUobXV0ZXhlcyksICh2b2lkKiltdXRl eGVzKTsKKwltdXRleGVzID0gbXV0ZXgtPm5leHRfbXV0ZXg7CisJZXJyID0gbXV0ZXhfdW5sb2Nr KG11dGV4KTsKKwlpZiAoZXJyKSByYl9idWcoImludmFsaWQga2VlcGluZ19tdXRleGVzIik7Cisg ICAgfQorfQorCiBzdGF0aWMgVkFMVUUKIHJiX211dGV4X3NsZWVwX2ZvcmV2ZXIoVkFMVUUgdGlt ZSkKIHsKLSAgICByYl90aHJlYWRfc2xlZXBfZm9yZXZlcigpOworICAgIHJiX3RocmVhZF9zbGVl cF9kZWFkbHkoKTsKICAgICByZXR1cm4gUW5pbDsKIH0KIApAQCAtMzI3NSwzICszMzk5LDQ0IEBA CiAKICAgICByZXR1cm4gdGggPyBRdHJ1ZSA6IFFmYWxzZTsKIH0KKworc3RhdGljIGludAorY2hl Y2tfZGVhZGxvY2tfaShzdF9kYXRhX3Qga2V5LCBzdF9kYXRhX3QgdmFsLCBpbnQgKmZvdW5kKQor eworICAgIFZBTFVFIHRodmFsID0ga2V5OworICAgIHJiX3RocmVhZF90ICp0aDsKKyAgICBHZXRU aHJlYWRQdHIodGh2YWwsIHRoKTsKKworICAgIGlmICh0aC0+c3RhdHVzICE9IFRIUkVBRF9TVE9Q UEVEX0ZPUkVWRVIgfHwgUlVCWV9WTV9JTlRFUlJVUFRFRCh0aCkpIHsKKwkqZm91bmQgPSAxOwor ICAgIH0KKyAgICBlbHNlIGlmICh0aC0+bG9ja2luZ19tdXRleCkgeworCW11dGV4X3QgKm11dGV4 OworCUdldE11dGV4UHRyKHRoLT5sb2NraW5nX211dGV4LCBtdXRleCk7CisKKwluYXRpdmVfbXV0 ZXhfbG9jaygmbXV0ZXgtPmxvY2spOworCWlmIChtdXRleC0+dGggPT0gdGggfHwgKCFtdXRleC0+ dGggJiYgbXV0ZXgtPmNvbmRfbm90aWZpZWQpKSB7CisJICAgICpmb3VuZCA9IDE7CisJfQorCW5h dGl2ZV9tdXRleF91bmxvY2soJm11dGV4LT5sb2NrKTsKKyAgICB9CisKKyAgICByZXR1cm4gKCpm b3VuZCkgPyBTVF9TVE9QIDogU1RfQ09OVElOVUU7Cit9CisKK3N0YXRpYyB2b2lkCityYl9jaGVj a19kZWFkbG9jayhyYl92bV90ICp2bSkKK3sKKyAgICBpbnQgZm91bmQgPSAwOworCisgICAgaWYg KHZtLT5saXZpbmdfdGhyZWFkcy0+bnVtX2VudHJpZXMgIT0gdm0tPnNsZWVwZXIpIHJldHVybjsK KworICAgIHN0X2ZvcmVhY2godm0tPmxpdmluZ190aHJlYWRzLCBjaGVja19kZWFkbG9ja19pLCAo c3RfZGF0YV90KSZmb3VuZCk7CisKKyAgICBpZiAoIWZvdW5kKSB7CisJVkFMVUUgYXJndlsyXTsK Kwlhcmd2WzBdID0gcmJfZUZhdGFsOworCWFyZ3ZbMV0gPSByYl9zdHJfbmV3MigiZGVhZGxvY2sg ZGV0ZWN0ZWQiKTsKKwlyYl90aHJlYWRfcmFpc2UoMiwgYXJndiwgdm0tPm1haW5fdGhyZWFkKTsK KyAgICB9Cit9CkluZGV4OiB2bS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHZtLmMJKHJldmlzaW9uIDE3MDk3 KQorKysgdm0uYwkod29ya2luZyBjb3B5KQpAQCAtMTQ3MCw2ICsxNDcwLDEzIEBACiAJICAgIFJV QllfRlJFRV9VTkxFU1NfTlVMTCh0aC0+c3RhY2spOwogCX0KIAorCWlmICh0aC0+bG9ja2luZ19t dXRleCAhPSBRZmFsc2UpIHsKKwkgICAgcmJfYnVnKCJ0aHJlYWRfZnJlZTogbG9ja2luZ19tdXRl eCBtdXN0IGJlIE5VTEwgKCVwOiVsZCkiLCB0aCwgdGgtPmxvY2tpbmdfbXV0ZXgpOworCX0KKwlp ZiAodGgtPmtlZXBpbmdfbXV0ZXhlcyAhPSBRZmFsc2UpIHsKKwkgICAgcmJfYnVnKCJ0aHJlYWRf ZnJlZToga2VlcGluZ19tdXRleGVzIG11c3QgYmUgTlVMTCAoJXA6JWxkKSIsIHRoLCB0aC0+bG9j a2luZ19tdXRleCk7CisJfQorCiAJaWYgKHRoLT5sb2NhbF9zdG9yYWdlKSB7CiAJICAgIHN0X2Zy ZWVfdGFibGUodGgtPmxvY2FsX3N0b3JhZ2UpOwogCX0KQEAgLTE1MzcsNiArMTU0NCw4IEBACiAJ UlVCWV9NQVJLX1VOTEVTU19OVUxMKHRoLT5yb290X2ZpYmVyKTsKIAlSVUJZX01BUktfVU5MRVNT X05VTEwodGgtPnN0YXRfaW5zbl91c2FnZSk7CiAKKwlSVUJZX01BUktfVU5MRVNTX05VTEwodGgt PmxvY2tpbmdfbXV0ZXgpOworCiAJcmJfbWFya190YmwodGgtPmxvY2FsX3N0b3JhZ2UpOwogCiAJ aWYgKEdFVF9USFJFQUQoKSAhPSB0aCAmJiB0aC0+bWFjaGluZV9zdGFja19zdGFydCAmJiB0aC0+ bWFjaGluZV9zdGFja19lbmQpIHsK ------=_Part_24893_32896088.1213192144689--