This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
On 01 Jun 2015 09:55, Martin Sebor wrote: > On 06/01/2015 02:38 AM, Florian Weimer wrote: > > On 05/31/2015 11:37 PM, Martin Sebor wrote: > >> The C++ 2011 std::call_once function is specified to allow > >> the initialization routine to exit by throwing an exception. > >> Such an execution, termed exceptional, requires call_once to > >> propagate the exception to its caller. A program may contain > >> any number of exceptional executions but only one returning > >> execution (which, if it exists, must be the last execution > >> with the same once flag). > > > > What do you propose as the commit message? > > I usually repeat the ChangeLog entry in my commit messages > (included in the patch) but I'd be happy to add more detail > or change the format if there's a preference one way or the > other. it would be best if your commit message was useful. usually that means your e-mail that was sent to the list w/the patch explaining what it was all about. if you're familiar with the linux kernel git message style, then that ;). > > It's not immediately obvious to me why this change works. :) > > The pthread_cleanup_push and pthread_cleanup_pop macros are > defined in sysdeps/nptl/pthread.h. In C code outside of > glibc compiled with -fexceptions (with __EXCEPTIONS defined), > they make use of GCC attribute cleanup to invoke the cleanup > handler during stack unwinding. (In C++ they make use of > a destructor of a class object.) These macros do the right > thing when an exception is thrown in the code they surround. > > The problem is that the nptl/pthreadP.h header redefines > the macros for internal use by glibc without the use of > the cleanup attribute. As a result, when an exception is > thrown, the cleanup handler is not invoked. This is what > happens in pthread_once.c. > > By removing the macro redefinitions from nptl/pthreadP.h > the change causes pthread_once.c to be compiled with the > more robust macros defined in pthread.h and allows cleanup > to take place even after an exception has been thrown so > long as glibc has been compiled with -fexceptions. they're in there to avoid the PLT right ? so deleting them means the relocs come back. can't we get both here ? -mike
Attachment:
signature.asc
Description: Digital signature
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |