mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-07 04:10:27 -08:00
* xgselect.c (xg_select): Use auto storage for the GPollFD buffer
as that's faster and simpler than static storage. Don't bother with the g_main_context_query overhead if g_main_context_pending says no events are pending. (gfds, gfds_size): Remove these static vars. (xgselect_initialize): Remove; no longer needed. All uses and decls removed.
This commit is contained in:
parent
9aba119d72
commit
0f46bc7515
4 changed files with 27 additions and 37 deletions
|
|
@ -1,5 +1,13 @@
|
|||
2012-08-25 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* xgselect.c (xg_select): Use auto storage for the GPollFD buffer
|
||||
as that's faster and simpler than static storage. Don't bother
|
||||
with the g_main_context_query overhead if g_main_context_pending
|
||||
says no events are pending.
|
||||
(gfds, gfds_size): Remove these static vars.
|
||||
(xgselect_initialize): Remove; no longer needed.
|
||||
All uses and decls removed.
|
||||
|
||||
* emacs.c (fatal_error_signal_hook): Remove.
|
||||
All uses removed. This leftover from old code was always 0.
|
||||
|
||||
|
|
|
|||
|
|
@ -29,9 +29,6 @@ along with GNU Emacs. If not, see <http§://www.gnu.org/licenses/>. */
|
|||
#include <setjmp.h>
|
||||
#include "xterm.h"
|
||||
|
||||
static GPollFD *gfds;
|
||||
static ptrdiff_t gfds_size;
|
||||
|
||||
int
|
||||
xg_select (int fds_lim, SELECT_TYPE *rfds, SELECT_TYPE *wfds, SELECT_TYPE *efds,
|
||||
EMACS_TIME *timeout, sigset_t *sigmask)
|
||||
|
|
@ -41,35 +38,31 @@ xg_select (int fds_lim, SELECT_TYPE *rfds, SELECT_TYPE *wfds, SELECT_TYPE *efds,
|
|||
|
||||
GMainContext *context;
|
||||
int have_wfds = wfds != NULL;
|
||||
int n_gfds = 0, retval = 0, our_fds = 0, max_fds = fds_lim - 1;
|
||||
GPollFD gfds_buf[128];
|
||||
GPollFD *gfds = gfds_buf;
|
||||
int gfds_size = sizeof gfds_buf / sizeof *gfds_buf;
|
||||
int n_gfds, retval = 0, our_fds = 0, max_fds = fds_lim - 1;
|
||||
int i, nfds, tmo_in_millisec;
|
||||
USE_SAFE_ALLOCA;
|
||||
|
||||
if (!x_in_use)
|
||||
return pselect (fds_lim, rfds, wfds, efds, tmop, sigmask);
|
||||
if (! (x_in_use
|
||||
&& g_main_context_pending (context = g_main_context_default ())))
|
||||
return pselect (fds_lim, rfds, wfds, efds, timeout, sigmask);
|
||||
|
||||
if (rfds) memcpy (&all_rfds, rfds, sizeof (all_rfds));
|
||||
else FD_ZERO (&all_rfds);
|
||||
if (wfds) memcpy (&all_wfds, wfds, sizeof (all_rfds));
|
||||
else FD_ZERO (&all_wfds);
|
||||
|
||||
/* 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);
|
||||
}
|
||||
|
||||
for (i = 0; i < n_gfds; ++i)
|
||||
{
|
||||
|
|
@ -86,6 +79,8 @@ xg_select (int fds_lim, SELECT_TYPE *rfds, SELECT_TYPE *wfds, SELECT_TYPE *efds,
|
|||
}
|
||||
}
|
||||
|
||||
SAFE_FREE ();
|
||||
|
||||
if (tmo_in_millisec >= 0)
|
||||
{
|
||||
tmo = make_emacs_time (tmo_in_millisec / 1000,
|
||||
|
|
@ -147,12 +142,3 @@ xg_select (int fds_lim, SELECT_TYPE *rfds, SELECT_TYPE *wfds, SELECT_TYPE *efds,
|
|||
return retval;
|
||||
}
|
||||
#endif /* USE_GTK || HAVE_GCONF || HAVE_GSETTINGS */
|
||||
|
||||
void
|
||||
xgselect_initialize (void)
|
||||
{
|
||||
#if defined (USE_GTK) || defined (HAVE_GCONF) || defined (HAVE_GSETTINGS)
|
||||
gfds_size = 128;
|
||||
gfds = xmalloc (gfds_size * sizeof *gfds);
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,6 +31,4 @@ extern int xg_select (int max_fds,
|
|||
EMACS_TIME *timeout,
|
||||
sigset_t *sigmask);
|
||||
|
||||
extern void xgselect_initialize (void);
|
||||
|
||||
#endif /* XGSELECT_H */
|
||||
|
|
|
|||
|
|
@ -10815,8 +10815,6 @@ x_initialize (void)
|
|||
XSetIOErrorHandler (x_io_error_quitter);
|
||||
|
||||
signal (SIGPIPE, x_connection_signal);
|
||||
|
||||
xgselect_initialize ();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue