summaryrefslogtreecommitdiff
path: root/src/xgselect.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/xgselect.c')
-rw-r--r--src/xgselect.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/xgselect.c b/src/xgselect.c
index 7850a16e9c0..e418e1a3c4e 100644
--- a/src/xgselect.c
+++ b/src/xgselect.c
@@ -54,9 +54,8 @@ xg_select (int fds_lim, fd_set *rfds, fd_set *wfds, fd_set *efds,
int gfds_size = ARRAYELTS (gfds_buf);
int n_gfds, retval = 0, our_fds = 0, max_fds = fds_lim - 1;
bool context_acquired = false;
- int i, nfds, tmo_in_millisec;
+ int i, nfds, tmo_in_millisec, must_free = 0;
bool need_to_dispatch;
- USE_SAFE_ALLOCA;
context = g_main_context_default ();
context_acquired = g_main_context_acquire (context);
@@ -77,7 +76,8 @@ xg_select (int fds_lim, fd_set *rfds, fd_set *wfds, fd_set *efds,
if (gfds_size < n_gfds)
{
- SAFE_NALLOCA (gfds, sizeof *gfds, n_gfds);
+ gfds = xnmalloc (n_gfds, sizeof *gfds);
+ must_free = 1;
gfds_size = n_gfds;
n_gfds = g_main_context_query (context, G_PRIORITY_LOW, &tmo_in_millisec,
gfds, gfds_size);
@@ -98,7 +98,8 @@ xg_select (int fds_lim, fd_set *rfds, fd_set *wfds, fd_set *efds,
}
}
- SAFE_FREE ();
+ if (must_free)
+ xfree (gfds);
if (n_gfds >= 0 && tmo_in_millisec >= 0)
{