On Wed, Oct 19, 2022 at 03:27:52PM +0200, Jakub Jelinek via Gcc-patches wrote: > > --- a/libgomp/error.c > > +++ b/libgomp/error.c > > @@ -77,7 +77,7 @@ void > > gomp_vfatal (const char *fmt, va_list list) > > { > > gomp_verror (fmt, list); > > - exit (EXIT_FAILURE); > > + abort (); > > } > > > > void > > I don't like this, abort has quite different user visible behavior > from exit, e.g. the former often dumps core. > > I believe in most places libgomp handles this by releasing locks before > calling gomp_{,v}fatal: > gomp_mutex_unlock (®ister_lock); > gomp_fatal ("Out of memory allocating %lu bytes", (unsigned long) size); > > gomp_mutex_unlock (&devicep->lock); > gomp_fatal ("Copying of %s object [%p..%p) to %s object [%p..%p) > failed", > src, srcaddr, srcaddr + size, dst, dstaddr, dstaddr + size); > > etc. > I could live with a gomp_fatal/gomp_vfatal alternative that would > use _exit/_Exit (but not sure if it is supported on all targets where > libgomp is) for uses where releasing locks is for whatever reason > not an option.
Or yet another possibility would be not use gomp_fatal from within the plugins, but use gomp_error instead and through possibly adjusted plugin APIs tell libgomp that there was a fatal error and let libgomp unlock anything that needs unlocking and exit (EXIT_FAILURE); afterwards. Jakub