From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Paul Pogonyshev Newsgroups: gmane.emacs.devel Subject: Re: Make computational threads leave user interface usable Date: Wed, 1 Nov 2017 16:10:27 +0100 Message-ID: References: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="94eb2c1b3ace9c41e5055ced4580" X-Trace: blaine.gmane.org 1509549046 12639 195.159.176.226 (1 Nov 2017 15:10:46 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Wed, 1 Nov 2017 15:10:46 +0000 (UTC) To: Emacs developers Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Nov 01 16:10:39 2017 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e9uf4-00025F-DT for ged-emacs-devel@m.gmane.org; Wed, 01 Nov 2017 16:10:34 +0100 Original-Received: from localhost ([::1]:56250 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e9uf9-0007bA-Ny for ged-emacs-devel@m.gmane.org; Wed, 01 Nov 2017 11:10:39 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:50402) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e9uf1-0007b1-K4 for emacs-devel@gnu.org; Wed, 01 Nov 2017 11:10:33 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1e9uez-0002xy-Nf for emacs-devel@gnu.org; Wed, 01 Nov 2017 11:10:31 -0400 Original-Received: from mail-pg0-x233.google.com ([2607:f8b0:400e:c05::233]:47587) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1e9uez-0002xP-Eb for emacs-devel@gnu.org; Wed, 01 Nov 2017 11:10:29 -0400 Original-Received: by mail-pg0-x233.google.com with SMTP id r25so2346788pgn.4 for ; Wed, 01 Nov 2017 08:10:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=XihASSGDfctZ/gmnhuLAxZogh7u/KTkXduQmdOKne4c=; b=m+rZTQsvmcJAVc1d7n57pRWQRPWaqdy+tlVIh5ovc8W9q8iZX938+RzRGZyVyqCMbR PTBHgoka/DsA/sz85iQPFUYU82eRSMYH64rWRoBrJUMoFRLpKtjkAFA8x6DOAtCya+nS 9+8evOGkm4vt56OtntTqZ2pANr8T/NBlOUR08CkGhbGnlUzSgB+rXxbGaiwM981yUSHe /OOYYuD2JHM3BXB2Les7F4MUsT0ONvueZCPjnbFlASANkeMkwp8rLIicvoqZTHP9oWzb j3GPASxT1/GKXC4T4gJEaz94TVHGGNccFfpxJ7eG0ESzlwLTUxcA8Hzb66osA+qQ3pP7 zgZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=XihASSGDfctZ/gmnhuLAxZogh7u/KTkXduQmdOKne4c=; b=BdYAfZghlhzxtjl3Gd8sh/yuCyODyGHE25XVcwl5XFz6/iOLWVJDvkWOw/feiJeFqe In6kWbopYdoKJC9a0E0B/jDTw2npwWyKFQfzO0R8pMGhy4gmt1SzJcEIadq9tZ99IhIA 8ljpw91Iv2EN5P7J8Rtgl88mJGE1AvBh4JhxFf5nl/OCNi/HE+A01jhWEWCO2lR5FXQd 5TWQcKogDBeIbWTofl2n6v3w1ISFUWk0SJKoMg/wZ0KdgNMu8ITCnjCxuNpDOnM+Cada N7Xkf2S1kkGmGp/nVxbap9/Ciu3c41i6o/R24mre1JBAkrKm/LCZYFwx+sFfCBkIy1hy Yy+A== X-Gm-Message-State: AMCzsaVWPQhoMZi+ih1TnAgNEUSDFpKH/ehhTCT+hWZrShQ3kiViFreA UCujcyYSE2MsqQcBCTTh+dFBYY39/eRNrQ6RlQ== X-Google-Smtp-Source: ABhQp+TCwh06sl4PML+KKt9kW7LAbJtb/GtSu6XsAT+0GcZDnHneZ9SnkaaVp0BBexYpylAivmDx6gRfZBGteZ+x6Mo= X-Received: by 10.99.149.66 with SMTP id t2mr198095pgn.105.1509549028418; Wed, 01 Nov 2017 08:10:28 -0700 (PDT) Original-Received: by 10.100.162.238 with HTTP; Wed, 1 Nov 2017 08:10:27 -0700 (PDT) In-Reply-To: X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::233 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:219846 Archived-At: --94eb2c1b3ace9c41e5055ced4580 Content-Type: text/plain; charset="UTF-8" And, of course, I forgot to attach the patch. Paul On 1 November 2017 at 16:06, Paul Pogonyshev wrote: > Since several versions Emacs has Lisp threads, but they are not used > much, because 1) only one thread executes at any given time; 2) > threads yield control to each other only with explicit (thread-yield) > call or IO blocks. Which means that it is pointless to start a new > thread for heavy computation: it will lock UI until finished anyway. > > Attached patch tries to solve point 2 only by making threads > automatically yield control to each other from time to time. The patch > is mainly for discussion. > > To see its effect, evaluate this expression: > > (make-thread (lambda () > (dotimes (n 10000000) > (when (= (% n 1000000) 0) > (message "%s" n))) > (message "done"))) > > In normal Emacs, UI is frozen until the thread completes. You see > messages in the echo area, but that's rather a special case: you > cannot e.g. navigate or type in the current buffer. > > With the patch, however, computation thread periodically (and > automatically: no alteration of the expression is needed) yields to UI > thread, leaving Emacs responsive while computation is going on. > > There are some problems, though. > > * Computation is 3-4 times slower than without auto-yielding. You can > compare to unpatched Emacs or bind `thread-inhibit-auto-yield' to t in > the thread function. This is probably due to the fact it auto-yields > ~50 times per second. But on the other hand, does it really have to be > that slow? I don't know much about Emacs internals, maybe someone with > more knowledge can say if it is unavoidable, or yielding is just not > optimized because it is just not done that frequently currently. > > * Message buffer contents seems screwed. But this is probably > "normal", as non-main threads shouldn't touch UI as I understand. This > expression is just an example. > > * Variable `thread-auto-yield-after' is accessible from Lisp, but > rebinding doesn't take effect immediately. Which is especially bad if > you rebind from nil to a non-nil value. > > In general, what are the thoughts about the patch? Does it look > interesting, or is auto-yielding simply out of question? > > Paul > > P.S. Please CC me on replies, I'm not subscribed to the list. --94eb2c1b3ace9c41e5055ced4580 Content-Type: text/plain; charset="US-ASCII"; name="auto-yielding.diff" Content-Disposition: attachment; filename="auto-yielding.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j9h6ift30 ZGlmZiAtLWdpdCBhL3NyYy9ieXRlY29kZS5jIGIvc3JjL2J5dGVjb2RlLmMKaW5kZXggNTBjN2Fi ZTI4OS4uZDUyZmFiNDNkMiAxMDA2NDQKLS0tIGEvc3JjL2J5dGVjb2RlLmMKKysrIGIvc3JjL2J5 dGVjb2RlLmMKQEAgLTQwMyw2ICs0MDMsOSBAQCBleGVjX2J5dGVfY29kZSAoTGlzcF9PYmplY3Qg Ynl0ZXN0ciwgTGlzcF9PYmplY3QgdmVjdG9yLCBMaXNwX09iamVjdCBtYXhkZXB0aCwKICAgICAg IGlmIChCWVRFX0NPREVfU0FGRSAmJiAhIChzdGFja19iYXNlIDw9IHRvcCAmJiB0b3AgPCBzdGFj a19saW0pKQogCWVtYWNzX2Fib3J0ICgpOwogCisgICAgICBpZiAoYXV0b195aWVsZF9wZW5kaW5n ICYmICF0aHJlYWRfaW5oaWJpdF9hdXRvX3lpZWxkKQorICAgICAgICBGdGhyZWFkX3lpZWxkICgp OworCiAjaWZkZWYgQllURV9DT0RFX01FVEVSCiAgICAgICBpbnQgcHJldl9vcCA9IHRoaXNfb3A7 CiAgICAgICB0aGlzX29wID0gb3AgPSBGRVRDSDsKZGlmZiAtLWdpdCBhL3NyYy9ldmFsLmMgYi9z cmMvZXZhbC5jCmluZGV4IDA2M2RlYjRiYTAuLjQzYTZmY2EyZmYgMTAwNjQ0Ci0tLSBhL3NyYy9l dmFsLmMKKysrIGIvc3JjL2V2YWwuYwpAQCAtMjEzNiw2ICsyMTM2LDggQEAgZXZhbF9zdWIgKExp c3BfT2JqZWN0IGZvcm0pCiAgICAgcmV0dXJuIGZvcm07CiAKICAgbWF5YmVfcXVpdCAoKTsKKyAg aWYgKGF1dG9feWllbGRfcGVuZGluZyAmJiAhdGhyZWFkX2luaGliaXRfYXV0b195aWVsZCkKKyAg ICBGdGhyZWFkX3lpZWxkICgpOwogCiAgIG1heWJlX2djICgpOwogCmRpZmYgLS1naXQgYS9zcmMv c3lzdGhyZWFkLmMgYi9zcmMvc3lzdGhyZWFkLmMKaW5kZXggNmY5YmFhYmFmMi4uY2MwZjdlMDEy NyAxMDA2NDQKLS0tIGEvc3JjL3N5c3RocmVhZC5jCisrKyBiL3NyYy9zeXN0aHJlYWQuYwpAQCAt NTMsNiArNTMsMTIgQEAgc3lzX2NvbmRfd2FpdCAoc3lzX2NvbmRfdCAqYywgc3lzX211dGV4X3Qg Km0pCiB7CiB9CiAKK2Jvb2wKK3N5c19jb25kX3RpbWVkd2FpdCAoc3lzX2NvbmRfdCAqYywgc3lz X211dGV4X3QgKm0sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdCkKK3sKKyAgcmV0dXJuIGZhbHNl OworfQorCiB2b2lkCiBzeXNfY29uZF9zaWduYWwgKHN5c19jb25kX3QgKmMpCiB7CkBAIC04OCw2 ICs5NCw3IEBAIHN5c190aHJlYWRfeWllbGQgKHZvaWQpCiAKICNlbGlmIGRlZmluZWQgKEhBVkVf UFRIUkVBRCkKIAorI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8c2NoZWQuaD4KIAogI2lm ZGVmIEhBVkVfU1lTX1BSQ1RMX0gKQEAgLTEyNCw2ICsxMzEsMTIgQEAgc3lzX2NvbmRfd2FpdCAo c3lzX2NvbmRfdCAqY29uZCwgc3lzX211dGV4X3QgKm11dGV4KQogICBwdGhyZWFkX2NvbmRfd2Fp dCAoY29uZCwgbXV0ZXgpOwogfQogCitib29sCitzeXNfY29uZF90aW1lZHdhaXQgKHN5c19jb25k X3QgKmNvbmQsIHN5c19tdXRleF90ICptdXRleCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICphYnN0 aW1lKQoreworICByZXR1cm4gcHRocmVhZF9jb25kX3RpbWVkd2FpdCAoY29uZCwgbXV0ZXgsIGFi c3RpbWUpID09IEVUSU1FRE9VVDsKK30KKwogdm9pZAogc3lzX2NvbmRfc2lnbmFsIChzeXNfY29u ZF90ICpjb25kKQogewpAQCAtMjY5LDYgKzI4MiwxNCBAQCBzeXNfY29uZF93YWl0IChzeXNfY29u ZF90ICpjb25kLCBzeXNfbXV0ZXhfdCAqbXV0ZXgpCiAgIEVudGVyQ3JpdGljYWxTZWN0aW9uICgo TFBDUklUSUNBTF9TRUNUSU9OKW11dGV4KTsKIH0KIAorYm9vbAorc3lzX2NvbmRfdGltZWR3YWl0 IChzeXNfY29uZF90ICpjb25kLCBzeXNfbXV0ZXhfdCAqbXV0ZXgsIGNvbnN0IHN0cnVjdCB0aW1l c3BlYyAqYWJzdGltZSkKK3sKKyAgLyogRklYTUU6IFdyaXRlLiAqLworICBzeXNfY29uZF93YWl0 IChjb25kLCBtdXRleCk7CisgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZAogc3lzX2NvbmRfc2ln bmFsIChzeXNfY29uZF90ICpjb25kKQogewpkaWZmIC0tZ2l0IGEvc3JjL3N5c3RocmVhZC5oIGIv c3JjL3N5c3RocmVhZC5oCmluZGV4IDQ0M2RjNTVjNmEuLjA3NTIwN2VmZWMgMTAwNjQ0Ci0tLSBh L3NyYy9zeXN0aHJlYWQuaAorKysgYi9zcmMvc3lzdGhyZWFkLmgKQEAgLTE5LDYgKzE5LDggQEAg YWxvbmcgd2l0aCBHTlUgRW1hY3MuICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LiAgKi8KICNpZm5kZWYgU1lTVEhSRUFEX0gKICNkZWZpbmUgU1lTVEhSRUFEX0gK IAorI2luY2x1ZGUgPHRpbWUuaD4KKwogI2lmZGVmIFRIUkVBRFNfRU5BQkxFRAogCiAjaWZkZWYg SEFWRV9QVEhSRUFECkBAIC05NSw2ICs5Nyw3IEBAIGV4dGVybiB2b2lkIHN5c19tdXRleF91bmxv Y2sgKHN5c19tdXRleF90ICopOwogCiBleHRlcm4gdm9pZCBzeXNfY29uZF9pbml0IChzeXNfY29u ZF90ICopOwogZXh0ZXJuIHZvaWQgc3lzX2NvbmRfd2FpdCAoc3lzX2NvbmRfdCAqLCBzeXNfbXV0 ZXhfdCAqKTsKK2V4dGVybiBib29sIHN5c19jb25kX3RpbWVkd2FpdCAoc3lzX2NvbmRfdCAqLCBz eXNfbXV0ZXhfdCAqLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7CiBleHRlcm4gdm9pZCBzeXNf Y29uZF9zaWduYWwgKHN5c19jb25kX3QgKik7CiBleHRlcm4gdm9pZCBzeXNfY29uZF9icm9hZGNh c3QgKHN5c19jb25kX3QgKik7CiBleHRlcm4gdm9pZCBzeXNfY29uZF9kZXN0cm95IChzeXNfY29u ZF90ICopOwpkaWZmIC0tZ2l0IGEvc3JjL3RocmVhZC5jIGIvc3JjL3RocmVhZC5jCmluZGV4IGMw M2NkZGEwZmEuLmRjZGRkNmQ2M2QgMTAwNjQ0Ci0tLSBhL3NyYy90aHJlYWQuYworKysgYi9zcmMv dGhyZWFkLmMKQEAgLTI5LDYgKzI5LDcgQEAgYWxvbmcgd2l0aCBHTlUgRW1hY3MuICBJZiBub3Qs IHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KIHN0YXRpYyBzdHJ1Y3Qg dGhyZWFkX3N0YXRlIG1haW5fdGhyZWFkOwogCiBzdHJ1Y3QgdGhyZWFkX3N0YXRlICpjdXJyZW50 X3RocmVhZCA9ICZtYWluX3RocmVhZDsKK2Jvb2wgYXV0b195aWVsZF9wZW5kaW5nID0gZmFsc2U7 CiAKIHN0YXRpYyBzdHJ1Y3QgdGhyZWFkX3N0YXRlICphbGxfdGhyZWFkcyA9ICZtYWluX3RocmVh ZDsKIApAQCAtMzcsNiArMzgsMTIgQEAgc3RhdGljIHN5c19tdXRleF90IGdsb2JhbF9sb2NrOwog ZXh0ZXJuIGludCBwb2xsX3N1cHByZXNzX2NvdW50OwogZXh0ZXJuIHZvbGF0aWxlIGludCBpbnRl cnJ1cHRfaW5wdXRfYmxvY2tlZDsKIAorc3RhdGljIGludCBhdXRvX3lpZWxkX3RocmVhZF9zdGFy dGVkOworc3RhdGljIHN5c190aHJlYWRfdCBhdXRvX3lpZWxkX3RocmVhZDsKK3N0YXRpYyBzeXNf bXV0ZXhfdCBhdXRvX3lpZWxkX2xvY2s7CitzdGF0aWMgc3lzX2NvbmRfdCBhdXRvX3lpZWxkX3J1 bGVzX2NoYW5nZWQ7CitzdGF0aWMgYm9vbCBhdXRvX3lpZWxkX3RocmVhZF9zd2l0Y2hlZDsKKwog DAogCiAvKiBtX3NwZWNwZGwgaXMgc2V0IHdoZW4gdGhlIHRocmVhZCBpcyBjcmVhdGVkIGFuZCBj bGVhcmVkIHdoZW4gdGhlCkBAIC02NSw2ICs3Miw5IEBAIHBvc3RfYWNxdWlyZV9nbG9iYWxfbG9j ayAoc3RydWN0IHRocmVhZF9zdGF0ZSAqc2VsZikKIAogICBpZiAocHJldl90aHJlYWQgIT0gY3Vy cmVudF90aHJlYWQpCiAgICAgeworICAgICAgaWYgKGF1dG9feWllbGRfdGhyZWFkX3N0YXJ0ZWQp CisgICAgICAgIHN5c19tdXRleF9sb2NrICgmYXV0b195aWVsZF9sb2NrKTsKKwogICAgICAgLyog UFJFVl9USFJFQUQgaXMgTlVMTCBpZiB0aGUgcHJldmlvdXNseSBjdXJyZW50IHRocmVhZAogCSBl eGl0ZWQuICBJbiB0aGlzIGNhc2UsIHRoZXJlIGlzIG5vIHJlYXNvbiB0byB1bmJpbmQsIGFuZAog CSB0cnlpbmcgd2lsbCBjcmFzaC4gICovCkBAIC03Miw2ICs4MiwxNCBAQCBwb3N0X2FjcXVpcmVf Z2xvYmFsX2xvY2sgKHN0cnVjdCB0aHJlYWRfc3RhdGUgKnNlbGYpCiAJdW5iaW5kX2Zvcl90aHJl YWRfc3dpdGNoIChwcmV2X3RocmVhZCk7CiAgICAgICByZWJpbmRfZm9yX3RocmVhZF9zd2l0Y2gg KCk7CiAKKyAgICAgIGlmIChhdXRvX3lpZWxkX3RocmVhZF9zdGFydGVkKQorICAgICAgICB7Cisg ICAgICAgICAgYXV0b195aWVsZF9wZW5kaW5nID0gZmFsc2U7CisgICAgICAgICAgYXV0b195aWVs ZF90aHJlYWRfc3dpdGNoZWQgPSB0cnVlOworICAgICAgICAgIHN5c19jb25kX3NpZ25hbCAoJmF1 dG9feWllbGRfcnVsZXNfY2hhbmdlZCk7CisgICAgICAgICAgc3lzX211dGV4X3VubG9jayAoJmF1 dG9feWllbGRfbG9jayk7CisgICAgICAgIH0KKwogICAgICAgIC8qIFNldCB0aGUgbmV3IHRocmVh ZCdzIGN1cnJlbnQgYnVmZmVyLiAgVGhpcyBuZWVkcyB0byBiZSBkb25lCiAJICBldmVuIGlmIGl0 IGlzIHRoZSBzYW1lIGJ1ZmZlciBhcyB0aGF0IG9mIHRoZSBwcmV2aW91cyB0aHJlYWQsCiAJICBi ZWNhdXNlIG9mIHRocmVhZC1sb2NhbCBiaW5kaW5ncy4gICovCkBAIC03NDcsNiArNzY1LDM4IEBA IHJ1bl90aHJlYWQgKHZvaWQgKnN0YXRlKQogICByZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHZv aWQgKgorYXV0b195aWVsZGVyICh2b2lkICp1bnVzZWQpCit7CisgIHN5c19tdXRleF9sb2NrICgm YXV0b195aWVsZF9sb2NrKTsKKworICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICBpbnQgdGlt ZWRfb3V0ID0gMDsKKyAgICAgIGF1dG9feWllbGRfdGhyZWFkX3N3aXRjaGVkID0gZmFsc2U7CisK KyAgICAgIGlmIChhdXRvX3lpZWxkX3BlbmRpbmcgfHwgTklMUCAoVnRocmVhZF9hdXRvX3lpZWxk X2FmdGVyKSkKKyAgICAgICAgc3lzX2NvbmRfd2FpdCAoJmF1dG9feWllbGRfcnVsZXNfY2hhbmdl ZCwgJmF1dG9feWllbGRfbG9jayk7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBk b3VibGUgYWZ0ZXIgPSBleHRyYWN0X2Zsb2F0IChWdGhyZWFkX2F1dG9feWllbGRfYWZ0ZXIpOwor CisgICAgICAgICAgaWYgKGFmdGVyID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg c3RydWN0IHRpbWVzcGVjIHVudGlsID0gdGltZXNwZWNfYWRkIChjdXJyZW50X3RpbWVzcGVjICgp LCBkdG90aW1lc3BlYyAoYWZ0ZXIpKTsKKyAgICAgICAgICAgICAgdGltZWRfb3V0ID0gc3lzX2Nv bmRfdGltZWR3YWl0ICgmYXV0b195aWVsZF9ydWxlc19jaGFuZ2VkLCAmYXV0b195aWVsZF9sb2Nr LCAmdW50aWwpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN5 c19jb25kX3dhaXQgKCZhdXRvX3lpZWxkX3J1bGVzX2NoYW5nZWQsICZhdXRvX3lpZWxkX2xvY2sp OworICAgICAgICB9CisKKyAgICAgIGlmICh0aW1lZF9vdXQgJiYgIWF1dG9feWllbGRfdGhyZWFk X3N3aXRjaGVkKQorICAgICAgICBhdXRvX3lpZWxkX3BlbmRpbmcgPSB0cnVlOworICAgIH0KKwor ICByZXR1cm4gTlVMTDsKK30KKwogdm9pZAogZmluYWxpemVfb25lX3RocmVhZCAoc3RydWN0IHRo cmVhZF9zdGF0ZSAqc3RhdGUpCiB7CkBAIC04MTUsNiArODY1LDEwIEBAIElmIE5BTUUgaXMgZ2l2 ZW4sIGl0IG11c3QgYmUgYSBzdHJpbmc7IGl0IG5hbWVzIHRoZSBuZXcgdGhyZWFkLiAgKi8pCiAK ICAgLyogRklYTUU6IHJhY2UgaGVyZSB3aGVyZSBuZXcgdGhyZWFkIG1pZ2h0IG5vdCBiZSBmaWxs ZWQgaW4/ICAqLwogICBYU0VUVEhSRUFEIChyZXN1bHQsIG5ld190aHJlYWQpOworCisgIGlmICgh YXV0b195aWVsZF90aHJlYWRfc3RhcnRlZCkKKyAgICBhdXRvX3lpZWxkX3RocmVhZF9zdGFydGVk ID0gc3lzX3RocmVhZF9jcmVhdGUgKCZhdXRvX3lpZWxkX3RocmVhZCwgImF1dG8teWllbGQiLCBh dXRvX3lpZWxkZXIsIE5VTEwpOworCiAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEwMjQsMTAg KzEwNzgsMjAgQEAgaW5pdF90aHJlYWRzX29uY2UgKHZvaWQpCiB2b2lkCiBpbml0X3RocmVhZHMg KHZvaWQpCiB7CisgIERFRlZBUl9MSVNQICgidGhyZWFkLWF1dG8teWllbGQtYWZ0ZXIiLCBWdGhy ZWFkX2F1dG9feWllbGRfYWZ0ZXIsCisgICAgZG9jOiAvKiBNYWtlIGN1cnJlbnQgdGhyZWFkIHlp ZWxkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhpcyBtYW55IHNlY29uZHMuICovKTsKKyAgVnRocmVh ZF9hdXRvX3lpZWxkX2FmdGVyID0gbWFrZV9mbG9hdCAoMC4wMik7CisKKyAgREVGVkFSX0JPT0wg KCJ0aHJlYWQtaW5oaWJpdC1hdXRvLXlpZWxkIiwgdGhyZWFkX2luaGliaXRfYXV0b195aWVsZCwK KyAgICBkb2M6IC8qIE5vbi1uaWwgbWVhbnMgbmV2ZXIgYXV0by15aWVsZC4gKi8pOworICB0aHJl YWRfaW5oaWJpdF9hdXRvX3lpZWxkID0gZmFsc2U7CisKICAgaW5pdF9tYWluX3RocmVhZCAoKTsK ICAgc3lzX2NvbmRfaW5pdCAoJm1haW5fdGhyZWFkLnRocmVhZF9jb25kdmFyKTsKICAgc3lzX211 dGV4X2luaXQgKCZnbG9iYWxfbG9jayk7CiAgIHN5c19tdXRleF9sb2NrICgmZ2xvYmFsX2xvY2sp OworICBzeXNfbXV0ZXhfaW5pdCAoJmF1dG9feWllbGRfbG9jayk7CisgIHN5c19jb25kX2luaXQg KCZhdXRvX3lpZWxkX3J1bGVzX2NoYW5nZWQpOwogICBjdXJyZW50X3RocmVhZCA9ICZtYWluX3Ro cmVhZDsKICAgbWFpbl90aHJlYWQudGhyZWFkX2lkID0gc3lzX3RocmVhZF9zZWxmICgpOwogfQpk aWZmIC0tZ2l0IGEvc3JjL3RocmVhZC5oIGIvc3JjL3RocmVhZC5oCmluZGV4IDE5YmFhZmJmOGEu LmQ1Zjc2ZDBlMDUgMTAwNjQ0Ci0tLSBhL3NyYy90aHJlYWQuaAorKysgYi9zcmMvdGhyZWFkLmgK QEAgLTI5Myw2ICsyOTMsNyBAQCBYQ09ORFZBUiAoTGlzcF9PYmplY3QgYSkKIH0KIAogZXh0ZXJu IHN0cnVjdCB0aHJlYWRfc3RhdGUgKmN1cnJlbnRfdGhyZWFkOworZXh0ZXJuIGJvb2wgYXV0b195 aWVsZF9wZW5kaW5nOwogCiBleHRlcm4gdm9pZCBmaW5hbGl6ZV9vbmVfdGhyZWFkIChzdHJ1Y3Qg dGhyZWFkX3N0YXRlICpzdGF0ZSk7CiBleHRlcm4gdm9pZCBmaW5hbGl6ZV9vbmVfbXV0ZXggKHN0 cnVjdCBMaXNwX011dGV4ICopOwo= --94eb2c1b3ace9c41e5055ced4580--