add lock for fftw wisdom

This commit is contained in:
Fabian Eckermann 2021-09-20 11:49:38 +02:00 committed by Andre Puschmann
parent ffba972fb7
commit d59ebfce9d
1 changed files with 29 additions and 2 deletions

View File

@ -50,7 +50,21 @@ __attribute__((constructor)) static void srsran_dft_load()
#ifdef FFTW_WISDOM_FILE #ifdef FFTW_WISDOM_FILE
char full_path[256]; char full_path[256];
get_fftw_wisdom_file(full_path, sizeof(full_path)); get_fftw_wisdom_file(full_path, sizeof(full_path));
fftwf_import_wisdom_from_filename(full_path); // lockf needs a file descriptor open for writing, so this must be r+
FILE* fd = fopen(full_path, "r+");
if (fd == NULL) {
return;
}
if (lockf(fileno(fd), F_LOCK, 0) == -1) {
perror("lockf()");
return;
}
fftwf_import_wisdom_from_file(fd);
if (lockf(fileno(fd), F_ULOCK, 0) == -1) {
perror("u-lockf()");
return;
}
fclose(fd);
#else #else
printf("Warning: FFTW Wisdom file not defined\n"); printf("Warning: FFTW Wisdom file not defined\n");
#endif #endif
@ -62,7 +76,20 @@ __attribute__((destructor)) static void srsran_dft_exit()
#ifdef FFTW_WISDOM_FILE #ifdef FFTW_WISDOM_FILE
char full_path[256]; char full_path[256];
get_fftw_wisdom_file(full_path, sizeof(full_path)); get_fftw_wisdom_file(full_path, sizeof(full_path));
fftwf_export_wisdom_to_filename(full_path); FILE* fd = fopen(full_path, "w");
if (fd == NULL) {
return;
}
if (lockf(fileno(fd), F_LOCK, 0) == -1) {
perror("lockf()");
return;
}
fftwf_export_wisdom_to_file(fd);
if (lockf(fileno(fd), F_ULOCK, 0) == -1) {
perror("u-lockf()");
return;
}
fclose(fd);
#endif #endif
fftwf_cleanup(); fftwf_cleanup();
} }