public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/marxin/heads/lto-plugin-get_symbols_v3-v3)] lto-plugin: make claim_file_handler thread-safe
@ 2022-05-16 12:19 Martin Liska
  0 siblings, 0 replies; only message in thread
From: Martin Liska @ 2022-05-16 12:19 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:71913009340f831046f5c5f9c1365f8d27e077b4

commit 71913009340f831046f5c5f9c1365f8d27e077b4
Author: Martin Liska <mliska@suse.cz>
Date:   Mon May 16 14:18:41 2022 +0200

    lto-plugin: make claim_file_handler thread-safe

Diff:
---
 lto-plugin/lto-plugin.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/lto-plugin/lto-plugin.c b/lto-plugin/lto-plugin.c
index 49484decd89..9d9d9b068d4 100644
--- a/lto-plugin/lto-plugin.c
+++ b/lto-plugin/lto-plugin.c
@@ -55,6 +55,7 @@ along with this program; see the file COPYING3.  If not see
 #include <unistd.h>
 #include <fcntl.h>
 #include <sys/types.h>
+#include <pthread.h>
 #ifdef HAVE_SYS_WAIT_H
 #include <sys/wait.h>
 #endif
@@ -158,6 +159,9 @@ enum symbol_style
   ss_uscore,	/* Underscore prefix all symbols.  */
 };
 
+/* Plug-in mutex.  */
+static pthread_mutex_t plugin_lock;
+
 static char *arguments_file_name;
 static ld_plugin_register_claim_file register_claim_file;
 static ld_plugin_register_all_symbols_read register_all_symbols_read;
@@ -1267,15 +1271,18 @@ claim_file_handler (const struct ld_plugin_input_file *file, int *claimed)
 			      lto_file.symtab.syms);
       check (status == LDPS_OK, LDPL_FATAL, "could not add symbols");
 
+      pthread_mutex_lock (&plugin_lock);
       num_claimed_files++;
       claimed_files =
 	xrealloc (claimed_files,
 		  num_claimed_files * sizeof (struct plugin_file_info));
       claimed_files[num_claimed_files - 1] = lto_file;
+      pthread_mutex_unlock (&plugin_lock);
 
       *claimed = 1;
     }
 
+  pthread_mutex_lock (&plugin_lock);
   if (offload_files == NULL)
     {
       /* Add dummy item to the start of the list.  */
@@ -1338,11 +1345,12 @@ claim_file_handler (const struct ld_plugin_input_file *file, int *claimed)
 	offload_files_last_lto = ofld;
       num_offload_files++;
     }
+  pthread_mutex_unlock (&plugin_lock);
 
   goto cleanup;
 
  err:
-  non_claimed_files++;
+  __atomic_fetch_add (&non_claimed_files, 1, __ATOMIC_RELAXED);
   free (lto_file.name);
 
  cleanup:
@@ -1443,6 +1451,12 @@ onload (struct ld_plugin_tv *tv)
   struct ld_plugin_tv *p;
   enum ld_plugin_status status;
 
+  if (pthread_mutex_init(&plugin_lock, NULL) != 0)
+    {
+      printf("mutex init failed\n");
+      abort ();
+    }
+
   p = tv;
   while (p->tv_tag)
     {


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-05-16 12:19 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-16 12:19 [gcc(refs/users/marxin/heads/lto-plugin-get_symbols_v3-v3)] lto-plugin: make claim_file_handler thread-safe Martin Liska

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).