Browse Source

Make detectone_meta_info thread-local

Luke Dashjr 12 years ago
parent
commit
540a818cf7
2 changed files with 15 additions and 2 deletions
  1. 2 2
      fpgautils.h
  2. 13 0
      util.c

+ 2 - 2
fpgautils.h

@@ -21,8 +21,8 @@ struct detectone_meta_info_t {
 	const char *serial;
 };
 
-// NOTE: Should detectone become run multithreaded, this will become a threadsafe #define
-extern struct detectone_meta_info_t detectone_meta_info;
+extern struct detectone_meta_info_t *_detectone_meta_info();
+#define detectone_meta_info (*_detectone_meta_info())
 extern void clear_detectone_meta_info(void);
 
 extern int _serial_autodetect(detectone_func_t, ...);

+ 13 - 0
util.c

@@ -52,6 +52,9 @@
 
 #include <utlist.h>
 
+#ifdef HAVE_FPGAUTILS
+#include "fpgautils.h"
+#endif
 #include "miner.h"
 #include "compat.h"
 #include "util.h"
@@ -2501,6 +2504,9 @@ struct bfgtls_data {
 #ifdef WIN32
 	LPSTR bfg_strerror_socketresult;
 #endif
+#ifdef HAVE_FPGAUTILS
+	struct detectone_meta_info_t __detectone_meta_info;
+#endif
 };
 
 static
@@ -2528,6 +2534,13 @@ struct bfgtls_data *get_bfgtls()
 	return bfgtls;
 }
 
+#ifdef HAVE_FPGAUTILS
+struct detectone_meta_info_t *_detectone_meta_info()
+{
+	return &get_bfgtls()->__detectone_meta_info;
+}
+#endif
+
 void bfg_init_threadlocal()
 {
 	if (pthread_key_create(&key_bfgtls, NULL))