From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Newsgroups: gmane.emacs.bugs Subject: bug#38632: 27.0.50; Emacs process name is changed permanently upon creating a named thread Date: Tue, 7 Jan 2020 17:46:49 +0100 Message-ID: <7FDF4517-978D-4500-9905-F41D9C16306D@acm.org> References: <4612F422-B860-4864-BB60-EA18468BCCDB@acm.org> <83tv57clsv.fsf@gnu.org> Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.11\)) Content-Type: multipart/mixed; boundary="Apple-Mail=_D606763C-C3E5-42A1-8820-0B3C0C653954" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="135341"; mail-complaints-to="usenet@blaine.gmane.org" Cc: 38632@debbugs.gnu.org, rpluim@gmail.com To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Jan 07 17:59:21 2020 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1iosCN-000Vkx-Bs for geb-bug-gnu-emacs@m.gmane.org; Tue, 07 Jan 2020 17:59:19 +0100 Original-Received: from localhost ([::1]:53176 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iosCL-0007gu-Lx for geb-bug-gnu-emacs@m.gmane.org; Tue, 07 Jan 2020 11:59:17 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:60129) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ios0V-0006B4-F6 for bug-gnu-emacs@gnu.org; Tue, 07 Jan 2020 11:47:04 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ios0U-0000CL-B4 for bug-gnu-emacs@gnu.org; Tue, 07 Jan 2020 11:47:03 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:43162) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ios0U-0000C5-7B for bug-gnu-emacs@gnu.org; Tue, 07 Jan 2020 11:47:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ios0U-0004in-53 for bug-gnu-emacs@gnu.org; Tue, 07 Jan 2020 11:47:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 07 Jan 2020 16:47:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 38632 X-GNU-PR-Package: emacs Original-Received: via spool by 38632-submit@debbugs.gnu.org id=B38632.157841561617966 (code B ref 38632); Tue, 07 Jan 2020 16:47:02 +0000 Original-Received: (at 38632) by debbugs.gnu.org; 7 Jan 2020 16:46:56 +0000 Original-Received: from localhost ([127.0.0.1]:49135 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ios0O-0004fT-0n for submit@debbugs.gnu.org; Tue, 07 Jan 2020 11:46:56 -0500 Original-Received: from mail231c50.megamailservers.eu ([91.136.10.241]:49822 helo=mail37c50.megamailservers.eu) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ios0M-0004dc-2D for 38632@debbugs.gnu.org; Tue, 07 Jan 2020 11:46:55 -0500 X-Authenticated-User: mattiase@bredband.net DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=megamailservers.eu; s=maildub; t=1578415612; bh=vooWOJbTWyJBedqBGuD0sg/hjh0h8Y2dHKS8z7LbwsE=; h=From:Subject:Date:In-Reply-To:Cc:To:References:From; b=GEYOeP4zmrpCfGSZTLItT4kzk9XrnrTYYTQNisRecHa50AjNQLYav5/6+0Vx7TAcH lbruOLRGuRCnOwLFADq0PqCZTA/Oz5rkcbtYplyXxLGWxeBnwS4+SzNVs7aXDSwLzf 91PXoFxhc8r5ujD+njnOPOoaXyRxsvvuRy8kRIuc= Feedback-ID: mattiase@acm.or Original-Received: from [192.168.0.4] (c188-150-171-71.bredband.comhem.se [188.150.171.71]) (authenticated bits=0) by mail37c50.megamailservers.eu (8.14.9/8.13.1) with ESMTP id 007Gknlf011978; Tue, 7 Jan 2020 16:46:51 +0000 In-Reply-To: <83tv57clsv.fsf@gnu.org> X-Mailer: Apple Mail (2.3445.104.11) X-CTCH-RefID: str=0001.0A0B0201.5E14B5FC.000A, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 X-CSC: 0 X-CHA: v=2.3 cv=eN1tc0h1 c=1 sm=1 tr=0 a=SF+I6pRkHZhrawxbOkkvaA==:117 a=SF+I6pRkHZhrawxbOkkvaA==:17 a=jpOVt7BSZ2e4Z31A5e1TngXxSK0=:19 a=M51BFTxLslgA:10 a=mDV3o1hIAAAA:8 a=KgOrj3LDPA-uksuyswYA:9 a=PJkFRpEzO4GG2giW:21 a=m5qhEjNOqaVB0tYR:21 a=CjuIK1q_8ugA:10 a=ejTQb-k67XKm5VBlOyIA:9 a=B2y7HmGcmWMA:10 a=_FVE-zBwftR9WsbkzFJk:22 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:174318 Archived-At: --Apple-Mail=_D606763C-C3E5-42A1-8820-0B3C0C653954 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii 7 jan. 2020 kl. 16.45 skrev Eli Zaretskii : > This line cannot be deleted, as it will cause systhread.c fail to > compile on MS-Windows. Oops! Reinstated. However, isn't thread_start_address inherently racy? It doesn't matter = much since it will only ever have a single value (run_thread), but it = does violate layering. That problem won't be addressed in this patch, = however. > And this comment on thread.h: Edited. Thanks for the review! Patch updated. --Apple-Mail=_D606763C-C3E5-42A1-8820-0B3C0C653954 Content-Disposition: attachment; filename=0001-Fix-BSD-and-macOS-builds-w.r.t.-pthread_setname_np-b.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="0001-Fix-BSD-and-macOS-builds-w.r.t.-pthread_setname_np-b.patch" Content-Transfer-Encoding: quoted-printable =46rom=20f69ecf1c239c3ed90d4265b0b41c9881387c49dd=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20=3D?UTF-8?q?Mattias=3D20Engdeg=3DC3=3DA5rd?=3D=20= =0ADate:=20Tue,=207=20Jan=202020=2017:08:25=20+0100=0A= Subject:=20[PATCH]=20Fix=20BSD=20and=20macOS=20builds=20w.r.t.=20= pthread_setname_np=0A=20(bug#38632)=0A=0Apthread_setname_np=20takes=20= only=20a=20single=20argument=20on=20BSD=20and=20macOS,=0Aand=20affects=20= the=20current=20thread=20only.=0A=0A*=20configure.ac:=20Add=20check=20= for=20single-argument=20pthread_setname_np=0A*=20src/systhread.c=20= (sys_thread_set_name):=20New=20(w32=20and=20pthread=20versions).=0A= (sys_thread_create):=20Remove=20name=20argument=20and=20name-setting.=0A= (w32_beginthread_wrapper):=20Remove=20name-setting.=0A*=20= src/systhread.h=20(sys_thread_create,=20sys_thread_set_name):=0AUpdate=20= prototypes.=0A*=20src/thread.c=20(run_thread):=20Call=20= sys_thread_set_name.=0A(Fmake_thread):=20Adapt=20call=20to=20= sys_thread_create.=0A*=20src/thread.h=20(struct=20thread_state):=20= Adjust=20comment.=0A---=0A=20configure.ac=20=20=20=20|=2017=20= +++++++++++++++=0A=20src/systhread.c=20|=2058=20= +++++++++++++++++++++++++------------------------=0A=20src/systhread.h=20= |=20=205=20+++--=0A=20src/thread.c=20=20=20=20|=20=205=20++++-=0A=20= src/thread.h=20=20=20=20|=20=203=20+--=0A=205=20files=20changed,=2055=20= insertions(+),=2033=20deletions(-)=0A=0Adiff=20--git=20a/configure.ac=20= b/configure.ac=0Aindex=20de4710f150..068ef5c20c=20100644=0A---=20= a/configure.ac=0A+++=20b/configure.ac=0A@@=20-4183,6=20+4183,23=20@@=20= AC_DEFUN=0A=20cfmakeraw=20cfsetspeed=20__executable_start=20log2=20= pthread_setname_np)=0A=20LIBS=3D$OLD_LIBS=0A=20=0A+if=20test=20= "$ac_cv_func_pthread_setname_np"=20=3D=20"yes";=20then=0A+=20=20= AC_CACHE_CHECK(=0A+=20=20=20[whether=20pthread_setname_np=20takes=20a=20= single=20argument],=0A+=20=20=20[emacs_cv_pthread_setname_np_1arg],=0A+=20= =20=20[AC_COMPILE_IFELSE(=0A+=20=20=20=20=20[AC_LANG_PROGRAM(=0A+=20=20=20= =20=20=20=20[[#include=20]],=0A+=20=20=20=20=20=20=20= [[pthread_setname_np=20("a");]])],=0A+=20=20=20=20=20= [emacs_cv_pthread_setname_np_1arg=3Dyes],=0A+=20=20=20=20=20= [emacs_cv_pthread_setname_np_1arg=3Dno])])=0A+=20=20if=20test=20= "$emacs_cv_pthread_setname_np_1arg"=20=3D=20"yes";=20then=0A+=20=20=20=20= AC_DEFINE(=0A+=20=20=20=20=20=20HAVE_PTHREAD_SETNAME_NP_1ARG,=201,=0A+=20= =20=20=20=20=20[Define=20to=201=20if=20pthread_setname_np=20takes=20a=20= single=20argument.])=0A+=20=20fi=0A+fi=0A+=0A=20dnl=20No=20need=20to=20= check=20for=20posix_memalign=20if=20aligned_alloc=20works.=0A=20= AC_CHECK_FUNCS([aligned_alloc=20posix_memalign],=20[break])=0A=20= AC_CHECK_DECLS([aligned_alloc],=20[],=20[],=20[[#include=20]])=0A= diff=20--git=20a/src/systhread.c=20b/src/systhread.c=0Aindex=20= 1dda036cc2..2c3a060a17=20100644=0A---=20a/src/systhread.c=0A+++=20= b/src/systhread.c=0A@@=20-200,9=20+200,28=20@@=20sys_thread_equal=20= (sys_thread_t=20t,=20sys_thread_t=20u)=0A=20=20=20return=20pthread_equal=20= (t,=20u);=0A=20}=0A=20=0A+void=0A+sys_thread_set_name=20(const=20char=20= *name)=0A+{=0A+#ifdef=20HAVE_PTHREAD_SETNAME_NP=0A+=20=20/*=20We=20need=20= to=20truncate=20here=20otherwise=20pthread_setname_np=0A+=20=20=20=20=20= fails=20to=20set=20the=20name.=20=20TASK_COMM_LEN=20is=20what=20the=20= length=0A+=20=20=20=20=20is=20called=20in=20the=20Linux=20kernel=20= headers=20(Bug#38632).=20=20*/=0A+#define=20TASK_COMM_LEN=2016=0A+=20=20= char=20p_name[TASK_COMM_LEN];=0A+=20=20strncpy=20(p_name,=20name,=20= TASK_COMM_LEN=20-=201);=0A+=20=20p_name[TASK_COMM_LEN=20-=201]=20=3D=20= '\0';=0A+=20#ifdef=20HAVE_PTHREAD_SETNAME_NP_1ARG=0A+=20=20= pthread_setname_np=20(p_name);=0A+=20#else=0A+=20=20pthread_setname_np=20= (pthread_self=20(),=20p_name);=0A+=20#endif=0A+#endif=0A+}=0A+=0A=20bool=0A= -sys_thread_create=20(sys_thread_t=20*thread_ptr,=20const=20char=20= *name,=0A-=09=09=20=20=20thread_creation_function=20*func,=20void=20= *arg)=0A+sys_thread_create=20(sys_thread_t=20*thread_ptr,=20= thread_creation_function=20*func,=0A+=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20void=20*arg)=0A=20{=0A=20=20=20pthread_attr_t=20= attr;=0A=20=20=20bool=20result=20=3D=20false;=0A@@=20-221,22=20+240,7=20= @@=20sys_thread_create=20(sys_thread_t=20*thread_ptr,=20const=20char=20= *name,=0A=20=20=20=20=20}=0A=20=0A=20=20=20if=20= (!pthread_attr_setdetachstate=20(&attr,=20PTHREAD_CREATE_DETACHED))=0A-=20= =20=20=20{=0A-=20=20=20=20=20=20result=20=3D=20pthread_create=20= (thread_ptr,=20&attr,=20func,=20arg)=20=3D=3D=200;=0A-#ifdef=20= HAVE_PTHREAD_SETNAME_NP=0A-=20=20=20=20=20=20if=20(result=20&&=20name=20= !=3D=20NULL)=0A-=20=20=20=20=20=20=20=20{=0A-=20=20=20=20=20=20=20=20=20=20= /*=20We=20need=20to=20truncate=20here=20otherwise=20pthread_setname_np=0A= -=20=20=20=20=20=20=20=20=20=20=20=20=20fails=20to=20set=20the=20name.=20= =20TASK_COMM_LEN=20is=20what=20the=20length=0A-=20=20=20=20=20=20=20=20=20= =20=20=20=20is=20called=20in=20the=20Linux=20kernel=20headers=20= (Bug#38632).=20=20*/=0A-#define=20TASK_COMM_LEN=2016=0A-=20=20=20=20=20=20= =20=20=20=20char=20p_name[TASK_COMM_LEN];=0A-=20=20=20=20=20=20=20=20=20=20= strncpy=20(p_name,=20name,=20TASK_COMM_LEN=20-=201);=0A-=20=20=20=20=20=20= =20=20=20=20p_name[TASK_COMM_LEN=20-=201]=20=3D=20'\0';=0A-=20=20=20=20=20= =20=20=20=20=20pthread_setname_np=20(*thread_ptr,=20p_name);=0A-=20=20=20= =20=20=20=20=20}=0A-#endif=0A-=20=20=20=20}=0A+=20=20=20=20result=20=3D=20= pthread_create=20(thread_ptr,=20&attr,=20func,=20arg)=20=3D=3D=200;=0A=20= =0A=20=20out:=20;=0A=20=20=20int=20error=20=3D=20pthread_attr_destroy=20= (&attr);=0A@@=20-457,26=20+461,24=20@@=20w32_set_thread_name=20(DWORD=20= thread_id,=20const=20char=20*name)=0A=20=0A=20static=20= thread_creation_function=20*thread_start_address;=0A=20=0A+void=0A= +sys_thread_set_name=20(const=20char=20*name)=0A+{=0A+=20=20= w32_set_thread_name=20(GetCurrentThreadId=20(),=20name);=0A+}=0A+=0A=20= /*=20_beginthread=20wants=20a=20void=20function,=20while=20we=20are=20= passed=20a=20function=0A=20=20=20=20that=20returns=20a=20pointer.=20=20= So=20we=20use=20a=20wrapper.=20=20See=20the=20command=20in=0A=20=20=20=20= w32term.h=20about=20the=20need=20for=20ALIGN_STACK=20attribute.=20=20*/=0A= =20static=20void=20ALIGN_STACK=0A=20w32_beginthread_wrapper=20(void=20= *arg)=0A=20{=0A-=20=20/*=20FIXME:=20This=20isn't=20very=20clean:=20= systhread.c=20is=20not=20supposed=20to=20know=0A-=20=20=20=20=20that=20= ARG=20is=20a=20pointer=20to=20a=20thread_state=20object,=20or=20be=20= familiar=0A-=20=20=20=20=20with=20thread_state=20object's=20structure=20= in=20general.=20=20*/=0A-=20=20struct=20thread_state=20*this_thread=20=3D=20= arg;=0A-=0A-=20=20if=20(this_thread->thread_name)=0A-=20=20=20=20= w32_set_thread_name=20(GetCurrentThreadId=20(),=20= this_thread->thread_name);=0A-=0A=20=20=20(void)thread_start_address=20= (arg);=0A=20}=0A=20=0A=20bool=0A-sys_thread_create=20(sys_thread_t=20= *thread_ptr,=20const=20char=20*name,=0A-=09=09=20=20=20= thread_creation_function=20*func,=20void=20*arg)=0A+sys_thread_create=20= (sys_thread_t=20*thread_ptr,=20thread_creation_function=20*func,=0A+=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20void=20*arg)=0A=20{=0A= =20=20=20/*=20FIXME:=20Do=20threads=20that=20run=20Lisp=20require=20some=20= minimum=20amount=20of=0A=20=20=20=20=20=20stack?=20=20Zero=20here=20= means=20each=20thread=20will=20get=20the=20same=20amount=20as=0Adiff=20= --git=20a/src/systhread.h=20b/src/systhread.h=0Aindex=20= 5368acfb52..005388fd5a=20100644=0A---=20a/src/systhread.h=0A+++=20= b/src/systhread.h=0A@@=20-112,10=20+112,11=20@@=20#define=20SYSTHREAD_H=0A= =20extern=20bool=20sys_thread_equal=20(sys_thread_t,=20sys_thread_t)=0A=20= =20=20ATTRIBUTE_WARN_UNUSED_RESULT;=0A=20=0A-extern=20bool=20= sys_thread_create=20(sys_thread_t=20*,=20const=20char=20*,=0A-=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20thread_creation_function=20*,=20void=20*)=0A+extern=20bool=20= sys_thread_create=20(sys_thread_t=20*,=20thread_creation_function=20*,=0A= +=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20void=20*)=0A=20=20=20ATTRIBUTE_WARN_UNUSED_RESULT;=0A= =20=0A=20extern=20void=20sys_thread_yield=20(void);=0A+extern=20void=20= sys_thread_set_name=20(const=20char=20*);=0A=20=0A=20#endif=20/*=20= SYSTHREAD_H=20*/=0Adiff=20--git=20a/src/thread.c=20b/src/thread.c=0A= index=20f7e39dc427..c7fe061426=20100644=0A---=20a/src/thread.c=0A+++=20= b/src/thread.c=0A@@=20-725,6=20+725,9=20@@=20run_thread=20(void=20= *state)=0A=20=20=20self->m_stack_bottom=20=3D=20self->stack_top=20=3D=20= (char=20*)=20&stack_pos;=0A=20=20=20self->thread_id=20=3D=20= sys_thread_self=20();=0A=20=0A+=20=20if=20(self->thread_name)=0A+=20=20=20= =20sys_thread_set_name=20(self->thread_name);=0A+=0A=20=20=20= acquire_global_lock=20(self);=0A=20=0A=20=20=20/*=20Put=20a=20dummy=20= catcher=20at=20top-level=20so=20that=20handlerlist=20is=20never=20NULL.=0A= @@=20-832,7=20+835,7=20@@=20DEFUN=20("make-thread",=20Fmake_thread,=20= Smake_thread,=201,=202,=200,=0A=20=20=20else=0A=20=20=20=20=20= new_thread->thread_name=20=3D=20NULL;=0A=20=20=20sys_thread_t=20thr;=0A-=20= =20if=20(!=20sys_thread_create=20(&thr,=20c_name,=20run_thread,=20= new_thread))=0A+=20=20if=20(!=20sys_thread_create=20(&thr,=20run_thread,=20= new_thread))=0A=20=20=20=20=20{=0A=20=20=20=20=20=20=20/*=20Restore=20= the=20previous=20situation.=20=20*/=0A=20=20=20=20=20=20=20all_threads=20= =3D=20all_threads->next_thread;=0Adiff=20--git=20a/src/thread.h=20= b/src/thread.h=0Aindex=20e96a063a10..a09929fa44=20100644=0A---=20= a/src/thread.h=0A+++=20b/src/thread.h=0A@@=20-169,8=20+169,7=20@@=20= #define=20getcjmp=20(current_thread->m_getcjmp)=0A=20=20=20=20=20=20= interrupter=20should=20broadcast=20to=20this=20condition.=20=20*/=0A=20=20= =20sys_cond_t=20*wait_condvar;=0A=20=0A-=20=20/*=20Thread's=20name=20in=20= the=20locale=20encoding.=20=20Actually=20used=20only=20on=0A-=20=20=20=20= =20WINDOWSNT.=20=20*/=0A+=20=20/*=20Thread's=20name=20in=20the=20locale=20= encoding.=20=20*/=0A=20=20=20char=20*thread_name;=0A=20=0A=20=20=20/*=20= This=20thread=20might=20have=20released=20the=20global=20lock.=20=20If=20= so,=20this=20is=0A--=20=0A2.21.0=20(Apple=20Git-122.2)=0A=0A= --Apple-Mail=_D606763C-C3E5-42A1-8820-0B3C0C653954--