From: SASADA Koichi Date: 2010-11-29T11:53:03+09:00 Subject: [ruby-dev:42656] [Request for Comment] avoid timer thread This is a multi-part message in MIME format. --------------000607040400080900090905 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Hi, I attached a patch to avoid timer thread. Your reviews are welcome. - Timer thread -> Interrupt thread - Two tasks - For Signal delivery - For Guarantee to interrupt ruby threads - wake up if needed - Communicate with POSIX semaphore. - Communicate with Signal handlers - Communicate with Ruby threads - Rarely wake-up (to reduce power consumption :)) - Ruby thread context switch timing is known by setitimer (SIGVTALRM) - set a timer using setitimer() if there is at least one waiting thread - disable a timer if there are no waiting threads Known issues: - MacOS X (Darwin Kernel Version 9.8.0) doesn't have sem_timedwait(). - workaround for MacOSX user: Replace sem_timedwait() with usleep(10000). - No Windows support - stick with some tests on several environments ---- Japanese / にほんご タイマスレッドを無くすパッチを書いてみました。結局、ヘルパースレッド的な ものは残っているけれど、あんまり走りません。レビュー頂けると幸いです。 -- // SASADA Koichi at atdot dot net --------------000607040400080900090905 Content-Type: text/plain; name="avoid_timerthread.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="avoid_timerthread.patch" SW5kZXg6IHRocmVhZF9wdGhyZWFkLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSB0aHJlYWRfcHRo cmVhZC5jCShyZXZpc2lvbiAyOTk2NCkKKysrIHRocmVhZF9wdGhyZWFkLmMJKHdvcmtpbmcg Y29weSkKQEAgLTExLDYgKzExLDcgQEAKIAogI2lmZGVmIFRIUkVBRF9TWVNURU1fREVQRU5E RU5UX0lNUExFTUVOVEFUSU9OCiAKKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KICNpbmNsdWRl ICJnYy5oIgogCiAjaWZkZWYgSEFWRV9TWVNfUkVTT1VSQ0VfSApAQCAtNDgsNiArNDksMjAg QEAgZ3ZsX3Nob3dfd2FpdGluZ190aHJlYWRzKHJiX3ZtX3QgKnZtKQogICAgIH0KIH0KIAor c3RhdGljIHZvaWQKK25hdGl2ZV9zZXRfdGltZXIobG9uZyB1c2VjKQoreworICAgIHN0cnVj dCBpdGltZXJ2YWwgaXQ7CisgICAgaW50IHI7CisKKyAgICBpdC5pdF9pbnRlcnZhbC50dl9z ZWMgPSAwOworICAgIGl0Lml0X2ludGVydmFsLnR2X3VzZWMgPSB1c2VjOyAvKiAxMG1zICov CisgICAgaXQuaXRfdmFsdWUudHZfc2VjID0gMDsKKyAgICBpdC5pdF92YWx1ZS50dl91c2Vj ID0gdXNlYzsKKyAgICByID0gc2V0aXRpbWVyKElUSU1FUl9WSVJUVUFMLCAmaXQsIDApOwor ICAgIGlmIChyICE9IDApIHJiX2J1Z19lcnJubygic2V0aXRpbWVyIiwgcik7Cit9CisKICNp ZiAhR1ZMX1NJTVBMRV9MT0NLCiBzdGF0aWMgdm9pZAogZ3ZsX3dhaXRpbmdfcHVzaChyYl92 bV90ICp2bSwgcmJfdGhyZWFkX3QgKnRoKQpAQCAtNjQsNiArNzksMTEgQEAgZ3ZsX3dhaXRp bmdfcHVzaChyYl92bV90ICp2bSwgcmJfdGhyZWFkXwogICAgIH0KICAgICB0aCA9IHZtLT5n dmwud2FpdGluZ190aHJlYWRzOwogICAgIHZtLT5ndmwud2FpdGluZysrOworCisgICAgaWYg KHZtLT5ndmwud2FpdGluZyA9PSAxKSB7CisJLyogaW52b2tlIHRpbWVyICovCisJbmF0aXZl X3NldF90aW1lcigxMDAwMCAvKiAxMG1zICovKTsKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lk CkBAIC03MSw2ICs5MSwxMSBAQCBndmxfd2FpdGluZ19zaGlmdChyYl92bV90ICp2bSwgcmJf dGhyZWFkCiB7CiAgICAgdm0tPmd2bC53YWl0aW5nX3RocmVhZHMgPSB2bS0+Z3ZsLndhaXRp bmdfdGhyZWFkcy0+bmF0aXZlX3RocmVhZF9kYXRhLmd2bF9uZXh0OwogICAgIHZtLT5ndmwu d2FpdGluZy0tOworCisgICAgaWYgKHZtLT5ndmwud2FpdGluZyA9PSAwKSB7CisJLyogc3Rv cCB0aW1lciAqLworCW5hdGl2ZV9zZXRfdGltZXIoMCk7CisgICAgfQogfQogI2VuZGlmCiAK QEAgLTg1LDcgKzExMCw2IEBAIGd2bF9hY3F1aXJlKHJiX3ZtX3QgKnZtLCByYl90aHJlYWRf dCAqdGgKIAlpZiAoR1ZMX0RFQlVHKSBmcHJpbnRmKHN0ZGVyciwgImd2bCBhY3F1aXJlICgl cCk6IHNsZWVwXG4iLCB0aCk7CiAJZ3ZsX3dhaXRpbmdfcHVzaCh2bSwgdGgpOwogICAgICAg ICBpZiAoR1ZMX0RFQlVHKSBndmxfc2hvd193YWl0aW5nX3RocmVhZHModm0pOwotCiAJd2hp bGUgKHZtLT5ndmwuYWNxdWlyZWQgIT0gMCB8fCB2bS0+Z3ZsLndhaXRpbmdfdGhyZWFkcyAh PSB0aCkgewogCSAgICBuYXRpdmVfY29uZF93YWl0KCZ0aC0+bmF0aXZlX3RocmVhZF9kYXRh Lmd2bF9jb25kLCAmdm0tPmd2bC5sb2NrKTsKIAl9CkBAIC0yOTcsOSArMzIxLDEwIEBAIHN0 YXRpYyByYl90aHJlYWRfbG9ja190IHNpZ25hbF90aHJlYWRfbGkKIHN0YXRpYyBwdGhyZWFk X2tleV90IHJ1YnlfbmF0aXZlX3RocmVhZF9rZXk7CiAKIHN0YXRpYyB2b2lkCi1udWxsX2Z1 bmMoaW50IGkpCit2dGFscm1faGFuZGxlcihpbnQgaSkKIHsKLSAgICAvKiBudWxsICovCisg ICAgcmJfdm1fdCAqdm0gPSBHRVRfVk0oKTsgLyogVE9ETzogZml4IG1lIGZvciBNdWx0aS1W TSAqLworICAgIFJVQllfVk1fU0VUX1RJTUVSX0lOVEVSUlVQVCh2bS0+cnVubmluZ190aHJl YWQpOwogfQogCiBzdGF0aWMgcmJfdGhyZWFkX3QgKgpAQCAtMzE0LDcgKzMzOSwxNCBAQCBy dWJ5X3RocmVhZF9zZXRfbmF0aXZlKHJiX3RocmVhZF90ICp0aCkKICAgICByZXR1cm4gcHRo cmVhZF9zZXRzcGVjaWZpYyhydWJ5X25hdGl2ZV90aHJlYWRfa2V5LCB0aCkgPT0gMDsKIH0K IAotc3RhdGljIHZvaWQgbmF0aXZlX3RocmVhZF9pbml0KHJiX3RocmVhZF90ICp0aCk7Citz dGF0aWMgdm9pZAorbmF0aXZlX3RocmVhZF9pbml0KHJiX3RocmVhZF90ICp0aCkKK3sKKyAg ICBuYXRpdmVfY29uZF9pbml0aWFsaXplKCZ0aC0+bmF0aXZlX3RocmVhZF9kYXRhLnNsZWVw X2NvbmQpOworICAgIG5hdGl2ZV9jb25kX2luaXRpYWxpemUoJnRoLT5uYXRpdmVfdGhyZWFk X2RhdGEuZ3ZsX2NvbmQpOworICAgIHJ1YnlfdGhyZWFkX3NldF9uYXRpdmUodGgpOworICAg IHBvc2l4X3NpZ25hbChTSUdWVEFMUk0sIHZ0YWxybV9oYW5kbGVyKTsKK30KIAogdm9pZAog SW5pdF9uYXRpdmVfdGhyZWFkKHZvaWQpCkBAIC0zMjUsMTUgKzM1Nyw2IEBAIEluaXRfbmF0 aXZlX3RocmVhZCh2b2lkKQogICAgIHRoLT50aHJlYWRfaWQgPSBwdGhyZWFkX3NlbGYoKTsK ICAgICBuYXRpdmVfdGhyZWFkX2luaXQodGgpOwogICAgIG5hdGl2ZV9tdXRleF9pbml0aWFs aXplKCZzaWduYWxfdGhyZWFkX2xpc3RfbG9jayk7Ci0gICAgcG9zaXhfc2lnbmFsKFNJR1ZU QUxSTSwgbnVsbF9mdW5jKTsKLX0KLQotc3RhdGljIHZvaWQKLW5hdGl2ZV90aHJlYWRfaW5p dChyYl90aHJlYWRfdCAqdGgpCi17Ci0gICAgbmF0aXZlX2NvbmRfaW5pdGlhbGl6ZSgmdGgt Pm5hdGl2ZV90aHJlYWRfZGF0YS5zbGVlcF9jb25kKTsKLSAgICBuYXRpdmVfY29uZF9pbml0 aWFsaXplKCZ0aC0+bmF0aXZlX3RocmVhZF9kYXRhLmd2bF9jb25kKTsKLSAgICBydWJ5X3Ro cmVhZF9zZXRfbmF0aXZlKHRoKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTUzNiw4ICs1NTks NiBAQCB0aHJlYWRfc3RhcnRfZnVuY18xKHZvaWQgKnRoX3B0cikKICAgICByZXR1cm4gMDsK IH0KIAotdm9pZCByYl90aHJlYWRfY3JlYXRlX2NvbnRyb2xfdGhyZWFkKHZvaWQpOwotCiBz dHJ1Y3QgY2FjaGVkX3RocmVhZF9lbnRyeSB7CiAgICAgdm9sYXRpbGUgcmJfdGhyZWFkX3Qg Kip0aF9hcmVhOwogICAgIHB0aHJlYWRfY29uZF90ICpjb25kOwpAQCAtODE2LDYgKzgzNyw4 IEBAIHN0cnVjdCBzaWduYWxfdGhyZWFkX2xpc3QgewogICAgIHN0cnVjdCBzaWduYWxfdGhy ZWFkX2xpc3QgKm5leHQ7CiB9OwogCitzZW1fdCBpbnRlcnJ1cHRfc2VtOworCiAjaWZuZGVm IF9fQ1lHV0lOX18KIHN0YXRpYyBzdHJ1Y3Qgc2lnbmFsX3RocmVhZF9saXN0IHNpZ25hbF90 aHJlYWRfbGlzdF9hbmNob3IgPSB7CiAgICAgMCwgMCwgMCwKQEAgLTg3MCw2ICs4OTMsNyBA QCBhZGRfc2lnbmFsX3RocmVhZF9saXN0KHJiX3RocmVhZF90ICp0aCkKIAkgICAgdGgtPm5h dGl2ZV90aHJlYWRfZGF0YS5zaWduYWxfdGhyZWFkX2xpc3QgPSBsaXN0OwogCX0pOwogICAg IH0KKyAgICBzZW1fcG9zdCgmaW50ZXJydXB0X3NlbSk7CiB9CiAjZW5kaWYKIApAQCAtODk2 LDkgKzkyMCw5IEBAIHJlbW92ZV9zaWduYWxfdGhyZWFkX2xpc3QocmJfdGhyZWFkX3QgKnQK ICAgICB9CiB9CiAKLXN0YXRpYyBwdGhyZWFkX3QgdGltZXJfdGhyZWFkX2lkOwotc3RhdGlj IHB0aHJlYWRfY29uZF90IHRpbWVyX3RocmVhZF9jb25kID0gUFRIUkVBRF9DT05EX0lOSVRJ QUxJWkVSOwotc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCB0aW1lcl90aHJlYWRfbG9jayA9IFBU SFJFQURfTVVURVhfSU5JVElBTElaRVI7CitzdGF0aWMgcHRocmVhZF90IGludGVycnVwdF90 aHJlYWRfaWQ7CitzdGF0aWMgcHRocmVhZF9jb25kX3QgaW50ZXJydXB0X3RocmVhZF9jb25k ID0gUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSOworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBp bnRlcnJ1cHRfdGhyZWFkX2xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwogCiBz dGF0aWMgc3RydWN0IHRpbWVzcGVjICoKIGdldF90cyhzdHJ1Y3QgdGltZXNwZWMgKnRzLCB1 bnNpZ25lZCBsb25nIG5zZWMpCkBAIC05MTUsMjIgKzkzOSw0MCBAQCBnZXRfdHMoc3RydWN0 IHRpbWVzcGVjICp0cywgdW5zaWduZWQgbG9uCiB9CiAKIHN0YXRpYyB2b2lkICoKLXRocmVh ZF90aW1lcih2b2lkICpkdW1teSkKK2ludGVycnVwdF90aHJlYWRfZnVuYyh2b2lkICpkdW1t eSkKIHsKICAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7CiAKLSAgICBuYXRpdmVfbXV0ZXhfbG9j aygmdGltZXJfdGhyZWFkX2xvY2spOwotICAgIG5hdGl2ZV9jb25kX2Jyb2FkY2FzdCgmdGlt ZXJfdGhyZWFkX2NvbmQpOwotI2RlZmluZSBXQUlUX0ZPUl8xME1TKCkgbmF0aXZlX2NvbmRf dGltZWR3YWl0KCZ0aW1lcl90aHJlYWRfY29uZCwgJnRpbWVyX3RocmVhZF9sb2NrLCBnZXRf dHMoJnRzLCBQRVJfTkFOTy8xMDApKQorICAgIC8qIHN5bmMgd2l0aCBjcmVhdGVyIHRocmVh ZCAqLworICAgIG5hdGl2ZV9tdXRleF9sb2NrKCZpbnRlcnJ1cHRfdGhyZWFkX2xvY2spOwor ICAgIG5hdGl2ZV9jb25kX2Jyb2FkY2FzdCgmaW50ZXJydXB0X3RocmVhZF9jb25kKTsKKyAg ICBuYXRpdmVfbXV0ZXhfdW5sb2NrKCZpbnRlcnJ1cHRfdGhyZWFkX2xvY2spOworCiAgICAg d2hpbGUgKHN5c3RlbV93b3JraW5nID4gMCkgewotCWludCBlcnIgPSBXQUlUX0ZPUl8xME1T KCk7Ci0JaWYgKGVyciA9PSBFVElNRURPVVQpOwotCWVsc2UgaWYgKGVyciA9PSAwIHx8IGVy ciA9PSBFSU5UUikgewotCSAgICBpZiAocmJfc2lnbmFsX2J1ZmZfc2l6ZSgpID09IDApIGJy ZWFrOworI2lmICFkZWZpbmVkKF9fQ1lHV0lOX18pICYmICFkZWZpbmVkKF9fU1lNQklBTjMy X18pCisJaWYgKHNpZ25hbF90aHJlYWRfbGlzdF9hbmNob3IubmV4dCkgeworCSAgICBzdHJ1 Y3QgdGltZXNwZWMgdHM7CisJICAgIHNlbV90aW1lZHdhaXQoJmludGVycnVwdF9zZW0sIGdl dF90cygmdHMsIFBFUl9OQU5PLzEwMCkpOworCX0KKwllbHNlCisjZW5kaWYKKwkgIHNlbV93 YWl0KCZpbnRlcnJ1cHRfc2VtKTsKKworCXN3aXRjaCAoZXJybm8pIHsKKwkgIGNhc2UgRUlO VkFMOgorCSAgY2FzZSBFREVBRExLOgorCSAgIHJiX2J1Z19lcnJubygiaW50ZXJydXB0X3Ro cmVhZF9jb3JlL3NlbV93YWl0IG9yIHNlbV90aW1lZHdhaXQiLCBlcnJubyk7CisJfQorCisJ aWYgKHJiX3NpZ25hbF9idWZmX3NpemUoKSA+IDApIHsKKwkgICAgLyogc2lnbmFsIGRlbGl2 ZXJseSAqLworCSAgICByYl92bV90ICp2bSA9IEdFVF9WTSgpOworCSAgICByYl90aHJlYWRw dHJfY2hlY2tfc2lnbmFsKHZtLT5tYWluX3RocmVhZCk7CiAJfQotCWVsc2UgcmJfYnVnX2Vy cm5vKCJ0aHJlYWRfdGltZXIvdGltZWR3YWl0IiwgZXJyKTsKIAogI2lmICFkZWZpbmVkKF9f Q1lHV0lOX18pICYmICFkZWZpbmVkKF9fU1lNQklBTjMyX18pCisJLyogU2VuZCBhIHNpZ25h bCB0byBpbnRlcnJ1cHQgc3BlY2lmaWMgcnVieSB0aHJlYWQgKi8KKwkvKiB0byBjYW5jZWwg YmxvY2tpbmcgcmVnaW9uICovCiAJaWYgKHNpZ25hbF90aHJlYWRfbGlzdF9hbmNob3IubmV4 dCkgewogCSAgICBGR0xPQ0soJnNpZ25hbF90aHJlYWRfbGlzdF9sb2NrLCB7CiAJCXN0cnVj dCBzaWduYWxfdGhyZWFkX2xpc3QgKmxpc3Q7CkBAIC05NDIsNTkgKzk4NCw1OSBAQCB0aHJl YWRfdGltZXIodm9pZCAqZHVtbXkpCiAJICAgIH0pOwogCX0KICNlbmRpZgotCXRpbWVyX3Ro cmVhZF9mdW5jdGlvbihkdW1teSk7CiAgICAgfQotICAgIG5hdGl2ZV9tdXRleF91bmxvY2so JnRpbWVyX3RocmVhZF9sb2NrKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZv aWQKLXJiX3RocmVhZF9jcmVhdGVfdGltZXJfdGhyZWFkKHZvaWQpCisvKiBjYWxsZWQgZnJv bSBzaWduYWwgaGFuZGxlciAqLwordm9pZAorcmJfdGhyZWFkX3NldF9zaWduYWwodm9pZCkK IHsKLSAgICByYl9lbmFibGVfaW50ZXJydXB0KCk7CisgICAgc2VtX3Bvc3QoJmludGVycnVw dF9zZW0pOworfQogCi0gICAgaWYgKCF0aW1lcl90aHJlYWRfaWQpIHsKK3N0YXRpYyB2b2lk CityYl90aHJlYWRfY3JlYXRlX2ludGVycnVwdF90aHJlYWQodm9pZCkKK3sKKyAgICBpZiAo IWludGVycnVwdF90aHJlYWRfaWQpIHsKIAlwdGhyZWFkX2F0dHJfdCBhdHRyOwogCWludCBl cnI7CiAKKwlzZW1faW5pdCgmaW50ZXJydXB0X3NlbSwgMCwgMCk7CisKIAlwdGhyZWFkX2F0 dHJfaW5pdCgmYXR0cik7CiAjaWZkZWYgUFRIUkVBRF9TVEFDS19NSU4KIAlwdGhyZWFkX2F0 dHJfc2V0c3RhY2tzaXplKCZhdHRyLAogCQkJCSAgUFRIUkVBRF9TVEFDS19NSU4gKyAoVEhS RUFEX0RFQlVHID8gQlVGU0laIDogMCkpOwogI2VuZGlmCi0JbmF0aXZlX211dGV4X2xvY2so JnRpbWVyX3RocmVhZF9sb2NrKTsKLQllcnIgPSBwdGhyZWFkX2NyZWF0ZSgmdGltZXJfdGhy ZWFkX2lkLCAmYXR0ciwgdGhyZWFkX3RpbWVyLCAwKTsKKwluYXRpdmVfbXV0ZXhfbG9jaygm aW50ZXJydXB0X3RocmVhZF9sb2NrKTsKKwllcnIgPSBwdGhyZWFkX2NyZWF0ZSgmaW50ZXJy dXB0X3RocmVhZF9pZCwgJmF0dHIsIGludGVycnVwdF90aHJlYWRfZnVuYywgMCk7CiAJaWYg KGVyciAhPSAwKSB7Ci0JICAgIG5hdGl2ZV9tdXRleF91bmxvY2soJnRpbWVyX3RocmVhZF9s b2NrKTsKKwkgICAgbmF0aXZlX211dGV4X3VubG9jaygmaW50ZXJydXB0X3RocmVhZF9sb2Nr KTsKIAkgICAgZnByaW50ZihzdGRlcnIsICJbRkFUQUxdIEZhaWxlZCB0byBjcmVhdGUgdGlt ZXIgdGhyZWFkIChlcnJubzogJWQpXG4iLCBlcnIpOwogCSAgICBleGl0KEVYSVRfRkFJTFVS RSk7CiAJfQotCW5hdGl2ZV9jb25kX3dhaXQoJnRpbWVyX3RocmVhZF9jb25kLCAmdGltZXJf dGhyZWFkX2xvY2spOwotCW5hdGl2ZV9tdXRleF91bmxvY2soJnRpbWVyX3RocmVhZF9sb2Nr KTsKKworCW5hdGl2ZV9jb25kX3dhaXQoJmludGVycnVwdF90aHJlYWRfY29uZCwgJmludGVy cnVwdF90aHJlYWRfbG9jayk7CisJbmF0aXZlX211dGV4X3VubG9jaygmaW50ZXJydXB0X3Ro cmVhZF9sb2NrKTsKICAgICB9CiAgICAgcmJfZGlzYWJsZV9pbnRlcnJ1cHQoKTsgLyogb25s eSB0aW1lciB0aHJlYWQgcmVjaWV2ZSBzaWduYWwgKi8KIH0KIAogc3RhdGljIGludAotbmF0 aXZlX3N0b3BfdGltZXJfdGhyZWFkKHZvaWQpCituYXRpdmVfc3RvcF9pbnRlcnJ1cHRfdGhy ZWFkKHZvaWQpCiB7CiAgICAgaW50IHN0b3BwZWQ7Ci0gICAgbmF0aXZlX211dGV4X2xvY2so JnRpbWVyX3RocmVhZF9sb2NrKTsKICAgICBzdG9wcGVkID0gLS1zeXN0ZW1fd29ya2luZyA8 PSAwOwotICAgIGlmIChzdG9wcGVkKSB7Ci0JbmF0aXZlX2NvbmRfc2lnbmFsKCZ0aW1lcl90 aHJlYWRfY29uZCk7Ci0gICAgfQotICAgIG5hdGl2ZV9tdXRleF91bmxvY2soJnRpbWVyX3Ro cmVhZF9sb2NrKTsKLSAgICBpZiAoc3RvcHBlZCkgewotCW5hdGl2ZV90aHJlYWRfam9pbih0 aW1lcl90aHJlYWRfaWQpOwotICAgIH0KKyAgICBzZW1fcG9zdCgmaW50ZXJydXB0X3NlbSk7 CisgICAgbmF0aXZlX3RocmVhZF9qb2luKGludGVycnVwdF90aHJlYWRfaWQpOwogICAgIHJl dHVybiBzdG9wcGVkOwogfQogCiBzdGF0aWMgdm9pZAotbmF0aXZlX3Jlc2V0X3RpbWVyX3Ro cmVhZCh2b2lkKQorbmF0aXZlX3Jlc2V0X2ludGVycnVwdF90aHJlYWQodm9pZCkKIHsKLSAg ICB0aW1lcl90aHJlYWRfaWQgPSAwOworICAgIGludGVycnVwdF90aHJlYWRfaWQgPSAwOwog fQogCiAjaWZkZWYgSEFWRV9TSUdBTFRTVEFDSwpJbmRleDogdm1fY29yZS5oDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQotLS0gdm1fY29yZS5oCShyZXZpc2lvbiAyOTk2MSkKKysrIHZtX2NvcmUuaAko d29ya2luZyBjb3B5KQpAQCAtNjQxLDkgKzY0MSwxMCBAQCBWQUxVRSByYl92bV9tYWtlX3By b2MocmJfdGhyZWFkX3QgKnRoLCBjCiBWQUxVRSByYl92bV9tYWtlX2Vudl9vYmplY3QocmJf dGhyZWFkX3QgKnRoLCByYl9jb250cm9sX2ZyYW1lX3QgKmNmcCk7CiB2b2lkIHJiX3ZtX2d2 bF9kZXN0cm95KHJiX3ZtX3QgKnZtKTsKIAotdm9pZCByYl90aHJlYWRfc3RhcnRfdGltZXJf dGhyZWFkKHZvaWQpOwotdm9pZCByYl90aHJlYWRfc3RvcF90aW1lcl90aHJlYWQodm9pZCk7 Ci12b2lkIHJiX3RocmVhZF9yZXNldF90aW1lcl90aHJlYWQodm9pZCk7Cit2b2lkIHJiX3Ro cmVhZF9zdGFydF9pbnRlcnJ1cHRfdGhyZWFkKHZvaWQpOwordm9pZCByYl90aHJlYWRfc3Rv cF9pbnRlcnJ1cHRfdGhyZWFkKHZvaWQpOwordm9pZCByYl90aHJlYWRfcmVzZXRfaW50ZXJy dXB0X3RocmVhZCh2b2lkKTsKKwogdm9pZCAqcmJfdGhyZWFkX2NhbGxfd2l0aF9ndmwodm9p ZCAqKCpmdW5jKSh2b2lkICopLCB2b2lkICpkYXRhMSk7CiBpbnQgcnVieV90aHJlYWRfaGFz X2d2bF9wKHZvaWQpOwogVkFMVUUgcmJfbWFrZV9iYWNrdHJhY2Uodm9pZCk7CkluZGV4OiB0 aHJlYWQuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRocmVhZC5jCShyZXZpc2lvbiAyOTk2MSkK KysrIHRocmVhZC5jCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNyArMTkzLDYgQEAgcmJfdGhy ZWFkX3NfZGVidWdfc2V0KFZBTFVFIHNlbGYsIFZBTFVFIAogI2VuZGlmCiBOT0lOTElORShz dGF0aWMgaW50IHRocmVhZF9zdGFydF9mdW5jXzIocmJfdGhyZWFkX3QgKnRoLCBWQUxVRSAq c3RhY2tfc3RhcnQsCiAJCQkJCVZBTFVFICpyZWdpc3Rlcl9zdGFja19zdGFydCkpOwotc3Rh dGljIHZvaWQgdGltZXJfdGhyZWFkX2Z1bmN0aW9uKHZvaWQgKik7CiAKICNpZiAgIGRlZmlu ZWQoX1dJTjMyKQogI2luY2x1ZGUgInRocmVhZF93aW4zMi5jIgpAQCAtMzY3LDcgKzM2Niw3 IEBAIHJiX3RocmVhZF90ZXJtaW5hdGVfYWxsKHZvaWQpCiAJfQogCVBPUF9UQUcoKTsKICAg ICB9Ci0gICAgcmJfdGhyZWFkX3N0b3BfdGltZXJfdGhyZWFkKCk7CisgICAgcmJfdGhyZWFk X3N0b3BfaW50ZXJydXB0X3RocmVhZCgpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjY4NCw0 OCArMjY4MywyNSBAQCByYl90aHJlYWRwdHJfY2hlY2tfc2lnbmFsKHJiX3RocmVhZF90ICpt CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZAotdGltZXJfdGhyZWFkX2Z1bmN0aW9uKHZvaWQg KmFyZykKLXsKLSAgICByYl92bV90ICp2bSA9IEdFVF9WTSgpOyAvKiBUT0RPOiBmaXggbWUg Zm9yIE11bHRpLVZNICovCi0KLSAgICAvKiBmb3IgdGltZSBzbGljZSAqLwotICAgIFJVQllf Vk1fU0VUX1RJTUVSX0lOVEVSUlVQVCh2bS0+cnVubmluZ190aHJlYWQpOwotCi0gICAgLyog Y2hlY2sgc2lnbmFsICovCi0gICAgcmJfdGhyZWFkcHRyX2NoZWNrX3NpZ25hbCh2bS0+bWFp bl90aHJlYWQpOwotCi0jaWYgMAotICAgIC8qIHByb3ZlIHByb2ZpbGVyICovCi0gICAgaWYg KHZtLT5wcm92ZV9wcm9maWxlLmVuYWJsZSkgewotCXJiX3RocmVhZF90ICp0aCA9IHZtLT5y dW5uaW5nX3RocmVhZDsKLQotCWlmICh2bS0+ZHVyaW5nX2djKSB7Ci0JICAgIC8qIEdDIHBy b3ZlIHByb2ZpbGluZyAqLwotCX0KLSAgICB9Ci0jZW5kaWYKLX0KLQogdm9pZAotcmJfdGhy ZWFkX3N0b3BfdGltZXJfdGhyZWFkKHZvaWQpCityYl90aHJlYWRfc3RvcF9pbnRlcnJ1cHRf dGhyZWFkKHZvaWQpCiB7Ci0gICAgaWYgKHRpbWVyX3RocmVhZF9pZCAmJiBuYXRpdmVfc3Rv cF90aW1lcl90aHJlYWQoKSkgewotCW5hdGl2ZV9yZXNldF90aW1lcl90aHJlYWQoKTsKKyAg ICBpZiAoaW50ZXJydXB0X3RocmVhZF9pZCAmJiBuYXRpdmVfc3RvcF9pbnRlcnJ1cHRfdGhy ZWFkKCkpIHsKKwluYXRpdmVfcmVzZXRfaW50ZXJydXB0X3RocmVhZCgpOwogICAgIH0KIH0K IAogdm9pZAotcmJfdGhyZWFkX3Jlc2V0X3RpbWVyX3RocmVhZCh2b2lkKQorcmJfdGhyZWFk X3Jlc2V0X2ludGVycnVwdF90aHJlYWQodm9pZCkKIHsKLSAgICBuYXRpdmVfcmVzZXRfdGlt ZXJfdGhyZWFkKCk7CisgICAgbmF0aXZlX3Jlc2V0X2ludGVycnVwdF90aHJlYWQoKTsKIH0K IAogdm9pZAotcmJfdGhyZWFkX3N0YXJ0X3RpbWVyX3RocmVhZCh2b2lkKQorcmJfdGhyZWFk X3N0YXJ0X2ludGVycnVwdF90aHJlYWQodm9pZCkKIHsKICAgICBzeXN0ZW1fd29ya2luZyA9 IDE7Ci0gICAgcmJfdGhyZWFkX2NyZWF0ZV90aW1lcl90aHJlYWQoKTsKKyAgICByYl90aHJl YWRfY3JlYXRlX2ludGVycnVwdF90aHJlYWQoKTsKIH0KIAogc3RhdGljIGludApAQCAtNDM4 OSw3ICs0MzY1LDcgQEAgSW5pdF9UaHJlYWQodm9pZCkKIAl9CiAgICAgfQogCi0gICAgcmJf dGhyZWFkX2NyZWF0ZV90aW1lcl90aHJlYWQoKTsKKyAgICByYl90aHJlYWRfY3JlYXRlX2lu dGVycnVwdF90aHJlYWQoKTsKIAogICAgICh2b2lkKW5hdGl2ZV9tdXRleF90cnlsb2NrOwog fQpJbmRleDogZXZhbC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZXZhbC5jCShyZXZpc2lvbiAy OTk2MSkKKysrIGV2YWwuYwkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNiBAQCBWQUxV RSByYl9lU3lzU3RhY2tFcnJvcjsKIC8qIGluaXRpYWxpemUgcnVieSAqLwogCiB2b2lkIHJi X2NsZWFyX3RyYWNlX2Z1bmModm9pZCk7Ci12b2lkIHJiX3RocmVhZF9zdG9wX3RpbWVyX3Ro cmVhZCh2b2lkKTsKIAogdm9pZCByYl9jYWxsX2luaXRzKHZvaWQpOwogdm9pZCBJbml0X2hl YXAodm9pZCk7CkBAIC0xMTgsOCArMTE3LDYgQEAgcnVieV9maW5hbGl6ZSh2b2lkKQogICAg IHJ1YnlfZmluYWxpemVfMSgpOwogfQogCi12b2lkIHJiX3RocmVhZF9zdG9wX3RpbWVyX3Ro cmVhZCh2b2lkKTsKLQogaW50CiBydWJ5X2NsZWFudXAodm9sYXRpbGUgaW50IGV4KQogewpA QCAtMTYwLDcgKzE1Nyw3IEBAIHJ1YnlfY2xlYW51cCh2b2xhdGlsZSBpbnQgZXgpCiAgICAg ZXggPSBlcnJvcl9oYW5kbGUoZXgpOwogICAgIHJ1YnlfZmluYWxpemVfMSgpOwogICAgIFBP UF9UQUcoKTsKLSAgICByYl90aHJlYWRfc3RvcF90aW1lcl90aHJlYWQoKTsKKyAgICByYl90 aHJlYWRfc3RvcF9pbnRlcnJ1cHRfdGhyZWFkKCk7CiAKICNpZiBFWElUX1NVQ0NFU1MgIT0g MCB8fCBFWElUX0ZBSUxVUkUgIT0gMQogICAgIHN3aXRjaCAoZXgpIHsKSW5kZXg6IHByb2Nl c3MuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KLS0tIHByb2Nlc3MuYwkocmV2aXNpb24gMjk5NjEpCisr KyBwcm9jZXNzLmMJKHdvcmtpbmcgY29weSkKQEAgLTk4OSwxNiArOTg5LDEyIEBAIHByb2Nf ZGV0YWNoKFZBTFVFIG9iaiwgVkFMVUUgcGlkKQogY2hhciAqc3RydG9rKCk7CiAjZW5kaWYK IAotdm9pZCByYl90aHJlYWRfc3RvcF90aW1lcl90aHJlYWQodm9pZCk7Ci12b2lkIHJiX3Ro cmVhZF9zdGFydF90aW1lcl90aHJlYWQodm9pZCk7Ci12b2lkIHJiX3RocmVhZF9yZXNldF90 aW1lcl90aHJlYWQodm9pZCk7Ci0KIHN0YXRpYyBpbnQgZm9ya2VkX2NoaWxkID0gMDsKIAog I2RlZmluZSBiZWZvcmVfZXhlYygpIFwKLSAgICAocmJfZW5hYmxlX2ludGVycnVwdCgpLCAo dm9pZCkoZm9ya2VkX2NoaWxkID8gMCA6IChyYl90aHJlYWRfc3RvcF90aW1lcl90aHJlYWQo KSwgMSkpKQorICAgIChyYl9lbmFibGVfaW50ZXJydXB0KCksICh2b2lkKShmb3JrZWRfY2hp bGQgPyAwIDogKHJiX3RocmVhZF9zdG9wX2ludGVycnVwdF90aHJlYWQoKSwgMSkpKQogI2Rl ZmluZSBhZnRlcl9leGVjKCkgXAotICAocmJfdGhyZWFkX3Jlc2V0X3RpbWVyX3RocmVhZCgp LCByYl90aHJlYWRfc3RhcnRfdGltZXJfdGhyZWFkKCksIGZvcmtlZF9jaGlsZCA9IDAsIHJi X2Rpc2FibGVfaW50ZXJydXB0KCkpCisgIChyYl90aHJlYWRfcmVzZXRfaW50ZXJydXB0X3Ro cmVhZCgpLCByYl90aHJlYWRfc3RhcnRfaW50ZXJydXB0X3RocmVhZCgpLCBmb3JrZWRfY2hp bGQgPSAwLCByYl9kaXNhYmxlX2ludGVycnVwdCgpKQogI2RlZmluZSBiZWZvcmVfZm9yaygp IGJlZm9yZV9leGVjKCkKICNkZWZpbmUgYWZ0ZXJfZm9yaygpIChHRVRfVEhSRUFEKCktPnRo cm93bl9lcnJpbmZvID0gMCwgYWZ0ZXJfZXhlYygpKQogCkluZGV4OiBzaWduYWwuYw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KLS0tIHNpZ25hbC5jCShyZXZpc2lvbiAyOTk2MSkKKysrIHNpZ25hbC5j CSh3b3JraW5nIGNvcHkpCkBAIC01MjIsMTEgKzUyMiwxNSBAQCBydWJ5X25hdGl2ZXRocmVh ZF9zaWduYWwoaW50IHNpZ251bSwgc2lnCiAjZW5kaWYKICNlbmRpZgogCit2b2lkIHJiX3Ro cmVhZF9zZXRfc2lnbmFsKHZvaWQpOworCiBzdGF0aWMgUkVUU0lHVFlQRQogc2lnaGFuZGxl cihpbnQgc2lnKQogewogICAgIEFUT01JQ19JTkMoc2lnbmFsX2J1ZmYuY250W3NpZ10pOwog ICAgIEFUT01JQ19JTkMoc2lnbmFsX2J1ZmYuc2l6ZSk7CisgICAgcmJfdGhyZWFkX3NldF9z aWduYWwoKTsKKwogI2lmICFkZWZpbmVkKEJTRF9TSUdOQUwpICYmICFkZWZpbmVkKFBPU0lY X1NJR05BTCkKICAgICBydWJ5X3NpZ25hbChzaWcsIHNpZ2hhbmRsZXIpOwogI2VuZGlmCkBA IC01NTYsOCArNTYwLDYgQEAgcmJfZGlzYWJsZV9pbnRlcnJ1cHQodm9pZCkKICNpZiBVU0Vf VFJBUF9NQVNLCiAgICAgc2lnc2V0X3QgbWFzazsKICAgICBzaWdmaWxsc2V0KCZtYXNrKTsK LSAgICBzaWdkZWxzZXQoJm1hc2ssIFNJR1ZUQUxSTSk7Ci0gICAgc2lnZGVsc2V0KCZtYXNr LCBTSUdTRUdWKTsKICAgICBwdGhyZWFkX3NpZ21hc2soU0lHX1NFVE1BU0ssICZtYXNrLCBO VUxMKTsKICNlbmRpZgogfQpAQCAtMTA1Nyw2ICsxMDU5LDQ0IEBAIGludCBydWJ5X2VuYWJs ZV9jb3JlZHVtcCA9IDA7CiAjZGVmaW5lIHJ1YnlfZW5hYmxlX2NvcmVkdW1wIDAKICNlbmRp ZgogCisjaWYgSEFWRV9QVEhSRUFECisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUg PHNpZ25hbC5oPgorCitzdGF0aWMgVkFMVUUKK3NpZ3NldDJoYXNoKHNpZ3NldF90ICpzZXQp Cit7CisgICAgVkFMVUUgaGFzaCA9IHJiX2hhc2hfbmV3KCk7CisgICAgY29uc3Qgc3RydWN0 IHNpZ25hbHMgKnNpZ3M7CisKKyAgICBmb3IgKHNpZ3MgPSBzaWdsaXN0OyBzaWdzLT5zaWdu bTsgc2lncysrKSB7CisJaWYgKHNpZ3MtPnNpZ25vID09IDApIGNvbnRpbnVlOworCXJiX2hh c2hfYXNldChoYXNoLCByYl9zdHJfbmV3MihzaWdzLT5zaWdubSksIHNpZ2lzbWVtYmVyKHNl dCwgc2lncy0+c2lnbm8pID8gUXRydWUgOiBRZmFsc2UpOworCWZwcmludGYoc3RkZXJyLCAi c2lnbmFsOiBTSUclLTZzIGlzICVkXG4iLCBzaWdzLT5zaWdubSwgc2lnaXNtZW1iZXIoc2V0 LCBzaWdzLT5zaWdubykpOworICAgIH0KKworICAgIHJldHVybiBoYXNoOworfQorCitzdGF0 aWMgVkFMVUUKK3NpZ21hc2tfb2ZfY3VycmVudF90aHJlYWQoVkFMVUUga2xhc3MpCit7Cisg ICAgc2lnc2V0X3Qgb2xkc2V0OworICAgIGludCByOworICAgIHIgPSBwdGhyZWFkX3NpZ21h c2soMCwgTlVMTCwgJm9sZHNldCk7CisgICAgaWYgKHIgIT0gMCkge3JiX2J1Z19lcnJubygi cHRocmVhZF9zaWdtYXNrIiwgcik7fQorICAgIHJldHVybiBzaWdzZXQyaGFzaCgmb2xkc2V0 KTsKK30KKworc3RhdGljIFZBTFVFCitzaWdtYXNrX29mX2N1cnJlbnRfcHJvY2VzcyhWQUxV RSBrbGFzcykKK3sKKyAgICBzaWdzZXRfdCBvbGRzZXQ7CisgICAgc2lncHJvY21hc2soMCwg TlVMTCwgJm9sZHNldCk7CisgICAgcmV0dXJuIHNpZ3NldDJoYXNoKCZvbGRzZXQpOworfQor I2VuZGlmCisKIC8qCiAgKiBNYW55IG9wZXJhdGluZyBzeXN0ZW1zIGFsbG93IHNpZ25hbHMg dG8gYmUgc2VudCB0byBydW5uaW5nCiAgKiBwcm9jZXNzZXMuIFNvbWUgc2lnbmFscyBoYXZl IGEgZGVmaW5lZCBlZmZlY3Qgb24gdGhlIHByb2Nlc3MsIHdoaWxlCkBAIC0xMTAyLDYgKzEx NDIsMTEgQEAgSW5pdF9zaWduYWwodm9pZCkKICAgICByYl9kZWZpbmVfZ2xvYmFsX2Z1bmN0 aW9uKCJ0cmFwIiwgc2lnX3RyYXAsIC0xKTsKICAgICByYl9kZWZpbmVfbW9kdWxlX2Z1bmN0 aW9uKG1TaWduYWwsICJ0cmFwIiwgc2lnX3RyYXAsIC0xKTsKICAgICByYl9kZWZpbmVfbW9k dWxlX2Z1bmN0aW9uKG1TaWduYWwsICJsaXN0Iiwgc2lnX2xpc3QsIDApOworCisjaWYgSEFW RV9QVEhSRUFECisgICAgcmJfZGVmaW5lX21vZHVsZV9mdW5jdGlvbihtU2lnbmFsLCAic2ln bWFza19vZl9jdXJyZW50X3RocmVhZCIsIHNpZ21hc2tfb2ZfY3VycmVudF90aHJlYWQsIDAp OworICAgIHJiX2RlZmluZV9tb2R1bGVfZnVuY3Rpb24obVNpZ25hbCwgInNpZ21hc2tfb2Zf Y3VycmVudF9wcm9jZXNzIiwgc2lnbWFza19vZl9jdXJyZW50X3Byb2Nlc3MsIDApOworI2Vu ZGlmCiAKICAgICByYl9kZWZpbmVfbWV0aG9kKHJiX2VTaWduYWwsICJpbml0aWFsaXplIiwg ZXNpZ25hbF9pbml0LCAtMSk7CiAgICAgcmJfZGVmaW5lX21ldGhvZChyYl9lU2lnbmFsLCAi c2lnbm8iLCBlc2lnbmFsX3NpZ25vLCAwKTsKTW9uIE5vdiAyOSAxMTozODo0MiAyMDEwICBL b2ljaGkgU2FzYWRhICA8a28xQGF0ZG90Lm5ldD4KCgkqIGV2YWwuYzogCgoJKiBldmFsLmMg KHJ1YnlfY2xlYW51cCk6IAoKCSogZXZhbC5jIChydWJ5X2ZpbmFsaXplKTogCgoJKiBwcm9j ZXNzLmM6IAoKCSogcHJvY2Vzcy5jIChwcm9jX2RldGFjaCk6IAoKCSogc2lnbmFsLmM6IAoK CSogc2lnbmFsLmMgKEluaXRfc2lnbmFsKTogCgoJKiBzaWduYWwuYyAocmJfZGlzYWJsZV9p bnRlcnJ1cHQpOiAKCgkqIHNpZ25hbC5jIChydWJ5X25hdGl2ZXRocmVhZF9zaWduYWwpOiAK CgkqIHRocmVhZC5jOiAKCgkqIHRocmVhZC5jIChJbml0X1RocmVhZCk6IAoKCSogdGhyZWFk LmMgKHJiX3RocmVhZF9zX2RlYnVnX3NldCk6IAoKCSogdGhyZWFkLmMgKHJiX3RocmVhZF90 ZXJtaW5hdGVfYWxsKTogCgoJKiB0aHJlYWQuYyAocmJfdGhyZWFkcHRyX2NoZWNrX3NpZ25h bCk6IAoKCSogdGhyZWFkX3B0aHJlYWQuYzogCgoJKiB0aHJlYWRfcHRocmVhZC5jIChJbml0 X25hdGl2ZV90aHJlYWQpOiAKCgkqIHRocmVhZF9wdGhyZWFkLmMgKGFkZF9zaWduYWxfdGhy ZWFkX2xpc3QpOiAKCgkqIHRocmVhZF9wdGhyZWFkLmMgKGdldF90cyk6IAoKCSogdGhyZWFk X3B0aHJlYWQuYyAoZ3ZsX2FjcXVpcmUpOiAKCgkqIHRocmVhZF9wdGhyZWFkLmMgKGd2bF9z aG93X3dhaXRpbmdfdGhyZWFkcyk6IAoKCSogdGhyZWFkX3B0aHJlYWQuYyAoZ3ZsX3dhaXRp bmdfcHVzaCk6IAoKCSogdGhyZWFkX3B0aHJlYWQuYyAoZ3ZsX3dhaXRpbmdfc2hpZnQpOiAK CgkqIHRocmVhZF9wdGhyZWFkLmMgKHJlbW92ZV9zaWduYWxfdGhyZWFkX2xpc3QpOiAKCgkq IHRocmVhZF9wdGhyZWFkLmMgKHJ1YnlfdGhyZWFkX3NldF9uYXRpdmUpOiAKCgkqIHRocmVh ZF9wdGhyZWFkLmMgKHRocmVhZF9zdGFydF9mdW5jXzEpOiAKCgkqIHRocmVhZF9wdGhyZWFk LmMgKHRocmVhZF90aW1lcik6IAoKCSogdm1fY29yZS5oOiAKCgkqIHZtX2NvcmUuaCAocmJf dm1fbWFrZV9wcm9jKTogCgo= --------------000607040400080900090905--