mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-09-28 01:57:14 +02:00
factor cancel
This commit is contained in:
@@ -465,6 +465,28 @@ g_cancellable_release_fd (GCancellable *cancellable)
|
|||||||
g_mutex_unlock (&cancellable_mutex);
|
g_mutex_unlock (&cancellable_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gint
|
||||||
|
ready_time_to_timeout (gint64 ready_time)
|
||||||
|
{
|
||||||
|
gint timeout;
|
||||||
|
|
||||||
|
if (ready_time > 0)
|
||||||
|
{
|
||||||
|
gint64 now = g_get_monotonic_time ();
|
||||||
|
|
||||||
|
if (now < ready_time)
|
||||||
|
timeout = (ready_time - now + 999) / G_TIME_SPAN_MILLISECOND;
|
||||||
|
else
|
||||||
|
timeout = 0;
|
||||||
|
}
|
||||||
|
else if (ready_time < 0)
|
||||||
|
timeout = -1;
|
||||||
|
else
|
||||||
|
timeout = 0;
|
||||||
|
|
||||||
|
return timeout;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* g_cancellable_poll_simple:
|
* g_cancellable_poll_simple:
|
||||||
* @cancellable: (nullable): a #GCancellable object
|
* @cancellable: (nullable): a #GCancellable object
|
||||||
@@ -511,7 +533,6 @@ g_cancellable_poll_simple (GCancellable *cancellable,
|
|||||||
{
|
{
|
||||||
GPollFD fds[2];
|
GPollFD fds[2];
|
||||||
guint nfds;
|
guint nfds;
|
||||||
gint timeout;
|
|
||||||
gint result;
|
gint result;
|
||||||
|
|
||||||
if (g_cancellable_set_error_if_cancelled (cancellable, error))
|
if (g_cancellable_set_error_if_cancelled (cancellable, error))
|
||||||
@@ -524,21 +545,7 @@ g_cancellable_poll_simple (GCancellable *cancellable,
|
|||||||
fds[1].revents = 0; /* we check this below */
|
fds[1].revents = 0; /* we check this below */
|
||||||
|
|
||||||
again:
|
again:
|
||||||
if (ready_time > 0)
|
result = g_poll (fds, nfds, ready_time_to_timeout (ready_time));
|
||||||
{
|
|
||||||
gint64 now = g_get_monotonic_time ();
|
|
||||||
|
|
||||||
if (now < ready_time)
|
|
||||||
timeout = (ready_time - now + 999) / G_TIME_SPAN_MILLISECOND;
|
|
||||||
else
|
|
||||||
timeout = 0;
|
|
||||||
}
|
|
||||||
else if (ready_time < 0)
|
|
||||||
timeout = -1;
|
|
||||||
else
|
|
||||||
timeout = 0;
|
|
||||||
|
|
||||||
result = g_poll (fds, nfds, timeout);
|
|
||||||
|
|
||||||
if (result == -1)
|
if (result == -1)
|
||||||
{
|
{
|
||||||
@@ -628,7 +635,6 @@ g_cancellable_poll_full (GCancellable *cancellable,
|
|||||||
{
|
{
|
||||||
GPollFD *all_pollfds;
|
GPollFD *all_pollfds;
|
||||||
gint all_nfds;
|
gint all_nfds;
|
||||||
gint timeout;
|
|
||||||
gint result;
|
gint result;
|
||||||
|
|
||||||
if (g_cancellable_set_error_if_cancelled (cancellable, error))
|
if (g_cancellable_set_error_if_cancelled (cancellable, error))
|
||||||
@@ -652,21 +658,7 @@ g_cancellable_poll_full (GCancellable *cancellable,
|
|||||||
all_nfds = nfds;
|
all_nfds = nfds;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ready_time > 0)
|
result = g_poll (all_pollfds, all_nfds, ready_time_to_timeout (ready_time));
|
||||||
{
|
|
||||||
gint64 now = g_get_monotonic_time ();
|
|
||||||
|
|
||||||
if (now < ready_time)
|
|
||||||
timeout = (ready_time - now + 999) / G_TIME_SPAN_MILLISECOND;
|
|
||||||
else
|
|
||||||
timeout = 0;
|
|
||||||
}
|
|
||||||
else if (ready_time < 0)
|
|
||||||
timeout = -1;
|
|
||||||
else
|
|
||||||
timeout = 0;
|
|
||||||
|
|
||||||
result = g_poll (all_pollfds, all_nfds, timeout);
|
|
||||||
|
|
||||||
if (result == -1)
|
if (result == -1)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user