소스 검색

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 _starpu_machine_is_running(void)
 {
 {
+	unsigned ret;
 	/* running is just protected by a memory barrier */
 	/* running is just protected by a memory barrier */
 	STARPU_RMB();
 	STARPU_RMB();
 	ANNOTATE_HAPPENS_AFTER(&config.running);
 	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)
 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)
 static void _starpu_kill_all_workers(struct _starpu_machine_config *pconfig)
 {
 {
 	/* set the flag which will tell workers to stop */
 	/* set the flag which will tell workers to stop */
+	ANNOTATE_HAPPENS_AFTER(&config.running);
 	pconfig->running = 0;
 	pconfig->running = 0;
 	/* running is just protected by a memory barrier */
 	/* running is just protected by a memory barrier */
 	ANNOTATE_HAPPENS_BEFORE(&config.running);
 	ANNOTATE_HAPPENS_BEFORE(&config.running);