Преглед изворни кода

Add more synchronization to explain helgrind that config.running is safe

Samuel Thibault пре 12 година
родитељ
комит
5f35a0321d
1 измењених фајлова са 5 додато и 1 уклоњено
  1. 5 1
      src/core/workers.c

+ 5 - 1
src/core/workers.c

@@ -893,10 +893,13 @@ out:
 
 unsigned _starpu_machine_is_running(void)
 {
+	unsigned ret;
 	/* running is just protected by a memory barrier */
 	STARPU_RMB();
 	ANNOTATE_HAPPENS_AFTER(&config.running);
-	return config.running;
+	ret = config.running;
+	ANNOTATE_HAPPENS_BEFORE(&config.running);
+	return ret;
 }
 
 unsigned _starpu_worker_can_block(unsigned memnode STARPU_ATTRIBUTE_UNUSED)
@@ -924,6 +927,7 @@ unsigned _starpu_worker_can_block(unsigned memnode STARPU_ATTRIBUTE_UNUSED)
 static void _starpu_kill_all_workers(struct _starpu_machine_config *pconfig)
 {
 	/* set the flag which will tell workers to stop */
+	ANNOTATE_HAPPENS_AFTER(&config.running);
 	pconfig->running = 0;
 	/* running is just protected by a memory barrier */
 	ANNOTATE_HAPPENS_BEFORE(&config.running);