Skip to content

Commit e98ff9f

Browse files
committed
correct sleep interface
1 parent 812293f commit e98ff9f

File tree

3 files changed

+18
-17
lines changed

3 files changed

+18
-17
lines changed

src/sleep/sleep.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@
1515
void c_sleep(const int milliseconds)
1616
{
1717

18-
#ifdef _MSC_VER
19-
Sleep(milliseconds);
20-
#else
21-
// https://linux.die.net/man/3/usleep
2218
if (milliseconds <= 0){
2319
fprintf(stderr, "ERROR:sleep: milliseconds must be strictly positive\n");
2420
return;
2521
}
2622

27-
//int ierr = usleep(*milliseconds * 1000);
23+
#ifdef _MSC_VER
24+
Sleep(milliseconds);
25+
#else
26+
// https://linux.die.net/man/3/usleep
27+
//int ierr = usleep(*milliseconds * 1000);
2828

2929
struct timespec t;
3030

@@ -40,8 +40,10 @@ void c_sleep(const int milliseconds)
4040
fprintf(stderr, "nanosleep() interrupted\n");
4141
break;
4242
case EINVAL:
43+
fprintf(stderr, "nanosleep() invalid timespec value (EINVAL)\n");
44+
break;
4345
case EFAULT:
44-
fprintf(stderr, "nanosleep() bad milliseconds value\n");
46+
fprintf(stderr, "nanosleep() timespec points outside accessible address space (EFAULT)\n");
4547
break;
4648
case ENOSYS:
4749
fprintf(stderr, "nanosleep() not supported on this system\n");

src/sleep/sleep_std.f90

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ subroutine c_sleep(millseconds) bind(C, name="c_sleep")
1717
contains
1818

1919
subroutine sleep_ms(millseconds)
20-
integer(C_INT), intent(in) :: millseconds
21-
call c_sleep(millseconds)
20+
integer, intent(in) :: millseconds
21+
22+
call c_sleep(int(millseconds, C_INT))
2223
end subroutine sleep_ms
2324

2425
end module sleep_std

test/sleep/CMakeLists.txt

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -58,17 +58,15 @@ target_link_libraries(fortran_micro_sleep PRIVATE f_micro_sleep)
5858
add_test(NAME Fortran_micro_sleep COMMAND fortran_micro_sleep)
5959

6060

61-
add_library(f_nano_sleep OBJECT ${PROJECT_SOURCE_DIR}/src/sleep/reference/posix_nanosleep.f90)
62-
set_property(TARGET f_nano_sleep PROPERTY Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/posix_nanosleep)
63-
target_include_directories(f_nano_sleep PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/include/posix_nanosleep)
61+
# This method is too brittle
62+
# add_library(f_nano_sleep OBJECT ${PROJECT_SOURCE_DIR}/src/sleep/reference/posix_nanosleep.f90)
63+
# set_property(TARGET f_nano_sleep PROPERTY Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/posix_nanosleep)
64+
# target_include_directories(f_nano_sleep PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/include/posix_nanosleep)
6465

65-
add_executable(fortran_nano_sleep test_sleep.f90)
66-
target_link_libraries(fortran_nano_sleep PRIVATE f_nano_sleep)
66+
# add_executable(fortran_nano_sleep test_sleep.f90)
67+
# target_link_libraries(fortran_nano_sleep PRIVATE f_nano_sleep)
6768

68-
add_test(NAME Fortran_nano_sleep COMMAND fortran_nano_sleep)
69-
if(APPLE AND CMAKE_Fortran_COMPILER_ID STREQUAL "LLVMFlang")
70-
set_property(TEST Fortran_nano_sleep PROPERTY DISABLED true)
71-
endif()
69+
# add_test(NAME Fortran_nano_sleep COMMAND fortran_nano_sleep)
7270

7371
endif()
7472

0 commit comments

Comments
 (0)