Add timeout logic to toastyfs_wait
This commit is contained in:
+30
-3
@@ -1935,9 +1935,14 @@ int toastyfs_process_events(ToastyFS *tfs, void **contexts, struct pollfd *polle
|
|||||||
return tcp_register_events(&tfs->tcp, contexts, polled);
|
return tcp_register_events(&tfs->tcp, contexts, polled);
|
||||||
}
|
}
|
||||||
|
|
||||||
void toastyfs_wait(ToastyFS *tfs, int opidx, ToastyFS_Result *result, int timeout)
|
int toastyfs_wait(ToastyFS *tfs, int opidx, ToastyFS_Result *result, int timeout)
|
||||||
{
|
{
|
||||||
// TODO: use the timeout parameter
|
Time start_time = INVALID_TIME;
|
||||||
|
if (timeout > -1) {
|
||||||
|
start_time = get_current_time();
|
||||||
|
if (start_time == INVALID_TIME)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
void *contexts[MAX_CONNS+1];
|
void *contexts[MAX_CONNS+1];
|
||||||
struct pollfd polled[MAX_CONNS+1];
|
struct pollfd polled[MAX_CONNS+1];
|
||||||
@@ -1946,7 +1951,29 @@ void toastyfs_wait(ToastyFS *tfs, int opidx, ToastyFS_Result *result, int timeou
|
|||||||
num_polled = toastyfs_process_events(tfs, contexts, polled, 0);
|
num_polled = toastyfs_process_events(tfs, contexts, polled, 0);
|
||||||
|
|
||||||
while (!toastyfs_isdone(tfs, opidx, result)) {
|
while (!toastyfs_isdone(tfs, opidx, result)) {
|
||||||
POLL(polled, num_polled, -1);
|
|
||||||
|
int remaining_timeout = -1;
|
||||||
|
if (timeout > -1) {
|
||||||
|
|
||||||
|
Time current_time = get_current_time();
|
||||||
|
if (current_time == INVALID_TIME)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
int elapsed = (current_time - start_time) / 1000000;
|
||||||
|
if (elapsed > timeout)
|
||||||
|
return 1; // Timed out
|
||||||
|
|
||||||
|
remaining_timeout = timeout - elapsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ret = POLL(polled, num_polled, remaining_timeout);
|
||||||
|
if (ret < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
num_polled = toastyfs_process_events(tfs, contexts, polled, num_polled);
|
num_polled = toastyfs_process_events(tfs, contexts, polled, num_polled);
|
||||||
|
if (num_polled < 0)
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user