[review v4] Introduce thread-safe way to handle SIGSEGV

Tom Tromey (Code Review) gerrit@gnutoolchain-gerrit.osci.io
Tue Nov 26 16:11:00 GMT 2019


Tom Tromey has posted comments on this change.

Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/171
......................................................................


Patch Set 4:

(1 comment)

| --- gdb/cp-support.c
| +++ gdb/cp-support.c
| @@ -1602,7 +1592,13 @@ #endif
| -
| -	      error_reported = 1;
| -	    }
| -
| -	  result = NULL;
| -	}
| +	  /* If there was a failure, we can't report it here, because
| +	     we might be in a background thread.  Instead, arrange for
| +	     the reporting to happen on the main thread.  */
| +          std::string copy = name;

PS4, Line 1595:

> (I thought I had commented on this, but I can't find the comment now.)
> 
> This explicit copy is unnecessary/redundant, because you're using [=] as capture.  As is, you copy the string twice, first into the "std::string copy" local, and then you copy that again in the lambda's capture by value.

You did comment earlier, on gdb-patches I think.

The copy is needed here because `name` is a `const char *` and
it isn't guaranteed to live long enough.

| +          run_on_main_thread ([=] ()
| +            {
| +              report_failed_demangle (copy.c_str (), core_dump_allowed,
| +                                      crash_signal);
| +            });
| +
| +          result = NULL;
| +        }
|      }

-- 
Gerrit-Project: binutils-gdb
Gerrit-Branch: master
Gerrit-Change-Id: Ic832bbb033b64744e4b44f14b41db7e4168ce427
Gerrit-Change-Number: 171
Gerrit-PatchSet: 4
Gerrit-Owner: Tom Tromey <tromey@sourceware.org>
Gerrit-Reviewer: Pedro Alves <palves@redhat.com>
Gerrit-Reviewer: Tom Tromey <tromey@sourceware.org>
Gerrit-Comment-Date: Tue, 26 Nov 2019 16:11:19 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Pedro Alves <palves@redhat.com>
Gerrit-MessageType: comment



More information about the Gdb-patches mailing list