|
@@ -750,9 +750,9 @@ acpi_os_wait_semaphore(acpi_handle handle, u32 units, u16 msec_timeout)
|
|
|
{
|
|
|
acpi_status status = AE_OK;
|
|
|
sem_t *sem = (sem_t *) handle;
|
|
|
+ int ret_val;
|
|
|
#ifndef ACPI_USE_ALTERNATE_TIMEOUT
|
|
|
struct timespec time;
|
|
|
- int ret_val;
|
|
|
#endif
|
|
|
|
|
|
if (!sem) {
|
|
@@ -778,7 +778,10 @@ acpi_os_wait_semaphore(acpi_handle handle, u32 units, u16 msec_timeout)
|
|
|
|
|
|
case ACPI_WAIT_FOREVER:
|
|
|
|
|
|
- if (sem_wait(sem)) {
|
|
|
+ while (((ret_val = sem_wait(sem)) == -1) && (errno == EINTR)) {
|
|
|
+ continue; /* Restart if interrupted */
|
|
|
+ }
|
|
|
+ if (ret_val != 0) {
|
|
|
status = (AE_TIME);
|
|
|
}
|
|
|
break;
|
|
@@ -831,7 +834,8 @@ acpi_os_wait_semaphore(acpi_handle handle, u32 units, u16 msec_timeout)
|
|
|
|
|
|
while (((ret_val = sem_timedwait(sem, &time)) == -1)
|
|
|
&& (errno == EINTR)) {
|
|
|
- continue;
|
|
|
+ continue; /* Restart if interrupted */
|
|
|
+
|
|
|
}
|
|
|
|
|
|
if (ret_val != 0) {
|