- /* Update event sources in GLib. */
- context = g_main_context_default ();
- g_main_context_pending (context);
-
- do {
- if (n_gfds > gfds_size)
- {
- xfree (gfds);
- gfds = xpalloc (0, &gfds_size, n_gfds - gfds_size, INT_MAX,
- sizeof *gfds);
- }
-
- n_gfds = g_main_context_query (context,
- G_PRIORITY_LOW,
- &tmo_in_millisec,
- gfds,
- gfds_size);
- } while (n_gfds > gfds_size);
+ n_gfds = g_main_context_query (context, G_PRIORITY_LOW, &tmo_in_millisec,
+ gfds, gfds_size);
+ if (gfds_size < n_gfds)
+ {
+ SAFE_NALLOCA (gfds, sizeof *gfds, n_gfds);
+ gfds_size = n_gfds;
+ n_gfds = g_main_context_query (context, G_PRIORITY_LOW, &tmo_in_millisec,
+ gfds, gfds_size);
+ }