Skip to content

Commit 87d3f40

Browse files
committed
Move semaphore cleanup into a unique_ptr destructor
1 parent f565f5e commit 87d3f40

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

src/aotcompile.cpp

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1648,8 +1648,25 @@ void jl_dump_native_impl(void *native_code,
16481648
has_veccall = !!dataM.getModuleFlag("julia.mv.veccall");
16491649
});
16501650

1651+
auto cleanup = [](sem_t* s) {
1652+
#if defined(_OS_LINUX_) || defined(_OS_DARWIN_)
1653+
if (s != SEM_FAILED) {
1654+
sem_post(s);
1655+
sem_close(s);
1656+
}
1657+
#endif
1658+
};
1659+
16511660
#if defined(_OS_LINUX_) || defined(_OS_DARWIN_)
1652-
sem_t *sem = sem_open("/jl_aotcompile_sem", O_CREAT, 0644, 3);
1661+
sem_t *sem = SEM_FAILED;
1662+
const char *sem_name = getenv("RAI_CC_SEM_NAME");
1663+
if (sem_name != NULL) {
1664+
sem = sem_open(sem_name, O_CREAT, 0644, 4);
1665+
} else {
1666+
// Use default name for debugging purposes
1667+
sem = sem_open("/jl_aotcompile_sem", O_CREAT, 0644, 4);
1668+
}
1669+
std::unique_ptr<sem_t, decltype(cleanup)> sem_guard(sem, cleanup);
16531670
if (sem == SEM_FAILED) {
16541671
jl_printf(JL_STDERR, "Failed to create semaphore: %s\n", strerror(errno));
16551672
} else {
@@ -1780,12 +1797,6 @@ void jl_dump_native_impl(void *native_code,
17801797
WRITE_ARCHIVE(obj_fname, obj, "", ".o");
17811798
WRITE_ARCHIVE(asm_fname, asm_, "", ".s");
17821799

1783-
#if defined(_OS_LINUX_) || defined(_OS_DARWIN_)
1784-
if (sem != SEM_FAILED) {
1785-
sem_post(sem);
1786-
sem_close(sem);
1787-
}
1788-
#endif
17891800
}
17901801

17911802
void addTargetPasses(legacy::PassManagerBase *PM, const Triple &triple, TargetIRAnalysis analysis)

0 commit comments

Comments
 (0)