From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Philipp Stephani Newsgroups: gmane.emacs.devel Subject: Re: [PATCH] Support threads in modules Date: Sun, 11 Jun 2017 13:25:54 +0000 Message-ID: References: <20170422152444.48735-1-phst@google.com> <83zif8p8d3.fsf@gnu.org> <83tw5gp6hy.fsf@gnu.org> <83r30kp5d1.fsf@gnu.org> <83inlrpwds.fsf@gnu.org> <8337b86mrl.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="001a1145c590fa86b50551af244d" X-Trace: blaine.gmane.org 1497187582 25242 195.159.176.226 (11 Jun 2017 13:26:22 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sun, 11 Jun 2017 13:26:22 +0000 (UTC) Cc: phst@google.com, emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Jun 11 15:26:17 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 1dK2si-0006F1-4x for ged-emacs-devel@m.gmane.org; Sun, 11 Jun 2017 15:26:16 +0200 Original-Received: from localhost ([::1]:34082 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dK2sn-0003jQ-BW for ged-emacs-devel@m.gmane.org; Sun, 11 Jun 2017 09:26:21 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:43375) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dK2sb-0003gd-Ta for emacs-devel@gnu.org; Sun, 11 Jun 2017 09:26:11 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dK2sa-00067h-Dy for emacs-devel@gnu.org; Sun, 11 Jun 2017 09:26:09 -0400 Original-Received: from mail-ot0-x229.google.com ([2607:f8b0:4003:c0f::229]:32984) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dK2sX-00066o-U9; Sun, 11 Jun 2017 09:26:06 -0400 Original-Received: by mail-ot0-x229.google.com with SMTP id k4so56036342otd.0; Sun, 11 Jun 2017 06:26:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=6nUPY73EpBtkPopitIJKYheXkh+taAXLbjSmS4ZeFps=; b=jAqB7ObyU4vEnoXLI2Ns+oKZll4b7Ye9PTwy759/34Ht+i9H2Hqug7c05GkaGFQnhm XTUO0qk1F6WXXU9YyRKvaq9o4co5wBxlCRGZ2tw3Npx0TB6tJoYapKq+E0nJEHbwYiRS Si+3v9XscVn5owyNt+YT7vK6DgHqNElyxit21TGLW0/Q5qs7RsAycMSs3WddwDyp6qve HDFnJ2K0DA6z7JuF1JiHrnSKRp2Vd+Uvpgso/rWG1JT8IHleC4BuW4wa1de0/FSkqU9W vF65ne0ThHlKoTu4dXiqpKe3LsGxnmBNHSKrC4fuSkvXcX8GAYgKqerVJk/aGKWAknq3 HH9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=6nUPY73EpBtkPopitIJKYheXkh+taAXLbjSmS4ZeFps=; b=P3doq9Z+pnIeG8j2SW0gScoCD9cIuIOofK9/ECzdbAzjTS6DYtuI/UmWEohUTe7fN7 RJHqE0bZAwU+afEYOpVeV57f81fSB9pE6LZMeUInQqz1BlJDITRpZ78RvGFZsp2x8DxM s06L9zGSfd7RgK8ochdKanazUM4AJbxK96WnZiy+jpsAq2SVshuEqhrfQ6C/boOf2ayH PRI4bAkstLg7RwlVVUdszW1BDnmuFVVLVbX7u8+GaxN3t174A79ITRnMFYiy8z0baOdN out9F85iYqj0+PRxMycGYIO88LtqBRzExuU1FxvOCUfCgFkKzp9/KKVIJSpk4Z2yY/EY S9wQ== X-Gm-Message-State: AKS2vOwU9IWx0aHe+3hKPNS5ERZQhv+A5i1y1Ew9otMpA+dq9A5r7wFO PZlE85mLR9AAhJ1WpQUYs4PwEcWFjce+ X-Received: by 10.157.43.180 with SMTP id u49mr29776772ota.182.1497187565038; Sun, 11 Jun 2017 06:26:05 -0700 (PDT) In-Reply-To: X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4003:c0f::229 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:215575 Archived-At: --001a1145c590fa86b50551af244d Content-Type: multipart/alternative; boundary="001a1145c590fa86b00551af244b" --001a1145c590fa86b00551af244b Content-Type: text/plain; charset="UTF-8" Philipp Stephani schrieb am Sa., 10. Juni 2017 um 21:58 Uhr: > > >> Once again: there _are_ legitimate situations in Emacs when for a >> short time current_thread is NULL. If you assume that these >> situations don't happen, your code will sooner or later crash and >> burn. I'm saying this because I once thought current_thread should be >> non-NULL at all times, and my code which assumed that did crash. >> > > I've reviewed the threads code, and I'm quite sure that current_thread can > never be NULL during check_thread. current_thread is only NULL between > exiting a Lisp thread and resuming execution in another thread after > reacquiring the GIL. The evaluator doesn't run during that phase, and > therefore no module functions can run. > current_thread could only be NULL during check_thread if called from a > thread that is not a Lisp thread (i.e. an OS thread created by the module). > That's exactly one of the undefined behavior situations that the assertions > are meant to prevent. > > Here's a new patch, which implements option (1). --001a1145c590fa86b00551af244b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


Philip= p Stephani <p.stephani2@gmail.c= om> schrieb am Sa., 10. Juni 2017 um 21:58=C2=A0Uhr:


Once again: there _are_ legitimate situations in Emacs when for a
short time current_thread is NULL.=C2=A0 If you assume that these
situations don't happen, your code will sooner or later crash and
burn.=C2=A0 I'm saying this because I once thought current_thread shoul= d be
non-NULL at all times, and my code which assumed that did crash.

I've reviewed the threads code, and I'm quite sure that curr= ent_thread can never be NULL during check_thread. current_thread is only NU= LL between exiting a Lisp thread and resuming execution in another thread a= fter reacquiring the GIL. The evaluator doesn't run during that phase, = and therefore no module functions can run.
current_thread could o= nly be NULL during check_thread if called from a thread that is not a Lisp = thread (i.e. an OS thread created by the module). That's exactly one of= the undefined behavior situations that the assertions are meant to prevent= .


Here'= ;s a new patch, which implements option (1).=C2=A0
--001a1145c590fa86b00551af244b-- --001a1145c590fa86b50551af244d Content-Type: text/plain; charset="US-ASCII"; name="0001-Support-threads-in-modules.txt" Content-Disposition: attachment; filename="0001-Support-threads-in-modules.txt" Content-Transfer-Encoding: base64 Content-ID: <15c9755092b32c864af1> X-Attachment-Id: 15c9755092b32c864af1 RnJvbSA4MTYwYzdkOTE0ODgyYjQwYmFkZjllYjhlNDc5MmRhMWIzMTM3NDVlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwIFN0ZXBoYW5pIDxwaHN0QGdvb2dsZS5jb20+CkRh dGU6IFNhdCwgMjIgQXByIDIwMTcgMTY6NTE6NDQgKzAyMDAKU3ViamVjdDogW1BBVENIXSBTdXBw b3J0IHRocmVhZHMgaW4gbW9kdWxlcwoKUmF0aGVyIHRoYW4gY2hlY2tpbmcgZm9yIHRoZSBtYWlu IHRocmVhZCwgY2hlY2sgZm9yIHRoZSBjdXJyZW50CnRocmVhZC4KCiogZW1hY3MtbW9kdWxlLmMg KGNoZWNrX3RocmVhZCk6IE5ldyBmdW5jdGlvbi4KKE1PRFVMRV9GVU5DVElPTl9CRUdJTl9OT19D QVRDSCwgbW9kdWxlX2dldF9lbnZpcm9ubWVudCkKKG1vZHVsZV9ub25fbG9jYWxfZXhpdF9jaGVj aywgbW9kdWxlX25vbl9sb2NhbF9leGl0X2NsZWFyKQoobW9kdWxlX25vbl9sb2NhbF9leGl0X2dl dCwgbW9kdWxlX25vbl9sb2NhbF9leGl0X3NpZ25hbCkKKG1vZHVsZV9ub25fbG9jYWxfZXhpdF90 aHJvdywgbW9kdWxlX2lzX25vdF9uaWwsIG1vZHVsZV9lcSk6IFVzZSBpdC4KLS0tCiBzcmMvZW1h Y3MtbW9kdWxlLmMgfCAyOSArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNo YW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9lbWFjcy1tb2R1bGUuYyBiL3NyYy9lbWFjcy1tb2R1bGUuYwppbmRleCBjMGYyYzNmY2QwLi5h ZmI3NWUzNTFkIDEwMDY0NAotLS0gYS9zcmMvZW1hY3MtbW9kdWxlLmMKKysrIGIvc3JjL2VtYWNz LW1vZHVsZS5jCkBAIC0zMCw2ICszMCw3IEBAIGFsb25nIHdpdGggR05VIEVtYWNzLiAgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KICNpbmNsdWRlICJjb2Rp bmcuaCIKICNpbmNsdWRlICJrZXlib2FyZC5oIgogI2luY2x1ZGUgInN5c3NpZ25hbC5oIgorI2lu Y2x1ZGUgInRocmVhZC5oIgogCiAjaW5jbHVkZSA8aW50cHJvcHMuaD4KICNpbmNsdWRlIDx2ZXJp ZnkuaD4KQEAgLTk0LDcgKzk1LDcgQEAgc3RydWN0IG1vZHVsZV9mdW5fZW52Owogc3RhdGljIExp c3BfT2JqZWN0IHZhbHVlX3RvX2xpc3AgKGVtYWNzX3ZhbHVlKTsKIHN0YXRpYyBlbWFjc192YWx1 ZSBsaXNwX3RvX3ZhbHVlIChMaXNwX09iamVjdCk7CiBzdGF0aWMgZW51bSBlbWFjc19mdW5jYWxs X2V4aXQgbW9kdWxlX25vbl9sb2NhbF9leGl0X2NoZWNrIChlbWFjc19lbnYgKik7Ci1zdGF0aWMg dm9pZCBjaGVja19tYWluX3RocmVhZCAodm9pZCk7CitzdGF0aWMgdm9pZCBjaGVja190aHJlYWQg KHZvaWQpOwogc3RhdGljIHZvaWQgaW5pdGlhbGl6ZV9lbnZpcm9ubWVudCAoZW1hY3NfZW52ICos IHN0cnVjdCBlbWFjc19lbnZfcHJpdmF0ZSAqKTsKIHN0YXRpYyB2b2lkIGZpbmFsaXplX2Vudmly b25tZW50IChlbWFjc19lbnYgKik7CiBzdGF0aWMgdm9pZCBmaW5hbGl6ZV9lbnZpcm9ubWVudF91 bndpbmQgKHZvaWQgKik7CkBAIC0xODEsNyArMTgyLDcgQEAgc3RhdGljIGVtYWNzX3ZhbHVlIGNv bnN0IG1vZHVsZV9uaWwgPSAwOwogCiAgICAxLiBUaGUgZmlyc3QgYXJndW1lbnQgc2hvdWxkIGFs d2F5cyBiZSBhIHBvaW50ZXIgdG8gZW1hY3NfZW52LgogCi0gICAyLiBFYWNoIGZ1bmN0aW9uIHNo b3VsZCBmaXJzdCBjYWxsIGNoZWNrX21haW5fdGhyZWFkLiAgTm90ZSB0aGF0CisgICAyLiBFYWNo IGZ1bmN0aW9uIHNob3VsZCBmaXJzdCBjYWxsIGNoZWNrX3RocmVhZC4gIE5vdGUgdGhhdAogICAg ICAgdGhpcyBmdW5jdGlvbiBpcyBhIG5vLW9wIHVubGVzcyBFbWFjcyB3YXMgYnVpbHQgd2l0aAog ICAgICAgLS1lbmFibGUtY2hlY2tpbmcuCiAKQEAgLTIxNSw3ICsyMTYsNyBAQCBzdGF0aWMgZW1h Y3NfdmFsdWUgY29uc3QgbW9kdWxlX25pbCA9IDA7CiAKICNkZWZpbmUgTU9EVUxFX0ZVTkNUSU9O X0JFR0lOX05PX0NBVENIKGVycm9yX3JldHZhbCkgICAgICAgICAgICAgICAgICAgIFwKICAgZG8g eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICBjaGVja19tYWluX3RocmVhZCAoKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjaGVja190aHJlYWQgKCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAo bW9kdWxlX25vbl9sb2NhbF9leGl0X2NoZWNrIChlbnYpICE9IGVtYWNzX2Z1bmNhbGxfZXhpdF9y ZXR1cm4pIFwKICAgICAgIHJldHVybiBlcnJvcl9yZXR2YWw7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfSB3aGlsZSAoZmFsc2UpCkBAIC0yNDEsOCAr MjQyLDkgQEAgQ0hFQ0tfVVNFUl9QVFIgKExpc3BfT2JqZWN0IG9iaikKIHN0YXRpYyBlbWFjc19l bnYgKgogbW9kdWxlX2dldF9lbnZpcm9ubWVudCAoc3RydWN0IGVtYWNzX3J1bnRpbWUgKmVydCkK IHsKLSAgY2hlY2tfbWFpbl90aHJlYWQgKCk7Ci0gIHJldHVybiAmZXJ0LT5wcml2YXRlX21lbWJl cnMtPnB1YjsKKyAgZW1hY3NfZW52ICplbnYgPSAmZXJ0LT5wcml2YXRlX21lbWJlcnMtPnB1YjsK KyAgY2hlY2tfdGhyZWFkICgpOworICByZXR1cm4gZW52OwogfQogCiAvKiBUbyBtYWtlIGdsb2Jh bCByZWZzIChHQy1wcm90ZWN0ZWQgZ2xvYmFsIHZhbHVlcykga2VlcCBhIGhhc2ggdGhhdApAQCAt MzAzLDIxICszMDUsMjEgQEAgbW9kdWxlX2ZyZWVfZ2xvYmFsX3JlZiAoZW1hY3NfZW52ICplbnYs IGVtYWNzX3ZhbHVlIHJlZikKIHN0YXRpYyBlbnVtIGVtYWNzX2Z1bmNhbGxfZXhpdAogbW9kdWxl X25vbl9sb2NhbF9leGl0X2NoZWNrIChlbWFjc19lbnYgKmVudikKIHsKLSAgY2hlY2tfbWFpbl90 aHJlYWQgKCk7CisgIGNoZWNrX3RocmVhZCAoKTsKICAgcmV0dXJuIGVudi0+cHJpdmF0ZV9tZW1i ZXJzLT5wZW5kaW5nX25vbl9sb2NhbF9leGl0OwogfQogCiBzdGF0aWMgdm9pZAogbW9kdWxlX25v bl9sb2NhbF9leGl0X2NsZWFyIChlbWFjc19lbnYgKmVudikKIHsKLSAgY2hlY2tfbWFpbl90aHJl YWQgKCk7CisgIGNoZWNrX3RocmVhZCAoKTsKICAgZW52LT5wcml2YXRlX21lbWJlcnMtPnBlbmRp bmdfbm9uX2xvY2FsX2V4aXQgPSBlbWFjc19mdW5jYWxsX2V4aXRfcmV0dXJuOwogfQogCiBzdGF0 aWMgZW51bSBlbWFjc19mdW5jYWxsX2V4aXQKIG1vZHVsZV9ub25fbG9jYWxfZXhpdF9nZXQgKGVt YWNzX2VudiAqZW52LCBlbWFjc192YWx1ZSAqc3ltLCBlbWFjc192YWx1ZSAqZGF0YSkKIHsKLSAg Y2hlY2tfbWFpbl90aHJlYWQgKCk7CisgIGNoZWNrX3RocmVhZCAoKTsKICAgc3RydWN0IGVtYWNz X2Vudl9wcml2YXRlICpwID0gZW52LT5wcml2YXRlX21lbWJlcnM7CiAgIGlmIChwLT5wZW5kaW5n X25vbl9sb2NhbF9leGl0ICE9IGVtYWNzX2Z1bmNhbGxfZXhpdF9yZXR1cm4pCiAgICAgewpAQCAt MzMyLDcgKzMzNCw3IEBAIG1vZHVsZV9ub25fbG9jYWxfZXhpdF9nZXQgKGVtYWNzX2VudiAqZW52 LCBlbWFjc192YWx1ZSAqc3ltLCBlbWFjc192YWx1ZSAqZGF0YSkKIHN0YXRpYyB2b2lkCiBtb2R1 bGVfbm9uX2xvY2FsX2V4aXRfc2lnbmFsIChlbWFjc19lbnYgKmVudiwgZW1hY3NfdmFsdWUgc3lt LCBlbWFjc192YWx1ZSBkYXRhKQogewotICBjaGVja19tYWluX3RocmVhZCAoKTsKKyAgY2hlY2tf dGhyZWFkICgpOwogICBpZiAobW9kdWxlX25vbl9sb2NhbF9leGl0X2NoZWNrIChlbnYpID09IGVt YWNzX2Z1bmNhbGxfZXhpdF9yZXR1cm4pCiAgICAgbW9kdWxlX25vbl9sb2NhbF9leGl0X3NpZ25h bF8xIChlbnYsIHZhbHVlX3RvX2xpc3AgKHN5bSksCiAJCQkJICAgIHZhbHVlX3RvX2xpc3AgKGRh dGEpKTsKQEAgLTM0MSw3ICszNDMsNyBAQCBtb2R1bGVfbm9uX2xvY2FsX2V4aXRfc2lnbmFsIChl bWFjc19lbnYgKmVudiwgZW1hY3NfdmFsdWUgc3ltLCBlbWFjc192YWx1ZSBkYXRhKQogc3RhdGlj IHZvaWQKIG1vZHVsZV9ub25fbG9jYWxfZXhpdF90aHJvdyAoZW1hY3NfZW52ICplbnYsIGVtYWNz X3ZhbHVlIHRhZywgZW1hY3NfdmFsdWUgdmFsdWUpCiB7Ci0gIGNoZWNrX21haW5fdGhyZWFkICgp OworICBjaGVja190aHJlYWQgKCk7CiAgIGlmIChtb2R1bGVfbm9uX2xvY2FsX2V4aXRfY2hlY2sg KGVudikgPT0gZW1hY3NfZnVuY2FsbF9leGl0X3JldHVybikKICAgICBtb2R1bGVfbm9uX2xvY2Fs X2V4aXRfdGhyb3dfMSAoZW52LCB2YWx1ZV90b19saXNwICh0YWcpLAogCQkJCSAgIHZhbHVlX3Rv X2xpc3AgKHZhbHVlKSk7CkBAIC03MjQsMTIgKzcyNiwxMyBAQCBtb2R1bGVfZnVuY3Rpb25fYXJp dHkgKGNvbnN0IHN0cnVjdCBMaXNwX01vZHVsZV9GdW5jdGlvbiAqY29uc3QgZnVuY3Rpb24pCiAv KiBIZWxwZXIgZnVuY3Rpb25zLiAgKi8KIAogc3RhdGljIHZvaWQKLWNoZWNrX21haW5fdGhyZWFk ICh2b2lkKQorY2hlY2tfdGhyZWFkICh2b2lkKQogeworICBlYXNzZXJ0IChjdXJyZW50X3RocmVh ZCAhPSBOVUxMKTsKICNpZmRlZiBIQVZFX1BUSFJFQUQKLSAgZWFzc2VydCAocHRocmVhZF9lcXVh bCAocHRocmVhZF9zZWxmICgpLCBtYWluX3RocmVhZF9pZCkpOworICBlYXNzZXJ0IChwdGhyZWFk X2VxdWFsIChwdGhyZWFkX3NlbGYgKCksIGN1cnJlbnRfdGhyZWFkLT50aHJlYWRfaWQpKTsKICNl bGlmIGRlZmluZWQgV0lORE9XU05UCi0gIGVhc3NlcnQgKEdldEN1cnJlbnRUaHJlYWRJZCAoKSA9 PSBkd01haW5UaHJlYWRJZCk7CisgIGVhc3NlcnQgKEdldEN1cnJlbnRUaHJlYWRJZCAoKSA9PSBj dXJyZW50X3RocmVhZC0+dGhyZWFkX2lkKTsKICNlbmRpZgogfQogCi0tIAoyLjEzLjEKCg== --001a1145c590fa86b50551af244d--