[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] /srv/bzr/emacs/trunk r109774: * xgselect.c (xg_select): Us
From: |
Paul Eggert |
Subject: |
[Emacs-diffs] /srv/bzr/emacs/trunk r109774: * xgselect.c (xg_select): Use auto storage for the GPollFD buffer |
Date: |
Sat, 25 Aug 2012 13:31:04 -0700 |
User-agent: |
Bazaar (2.5.0) |
------------------------------------------------------------
revno: 109774
committer: Paul Eggert <address@hidden>
branch nick: trunk
timestamp: Sat 2012-08-25 13:31:04 -0700
message:
* 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.
modified:
src/ChangeLog
src/xgselect.c
src/xgselect.h
src/xterm.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2012-08-25 06:38:43 +0000
+++ b/src/ChangeLog 2012-08-25 20:31:04 +0000
@@ -1,5 +1,13 @@
2012-08-25 Paul Eggert <address@hidden>
+ * 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.
=== modified file 'src/xgselect.c'
--- a/src/xgselect.c 2012-07-10 23:24:36 +0000
+++ b/src/xgselect.c 2012-08-25 20:31:04 +0000
@@ -29,9 +29,6 @@
#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 @@
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 @@
}
}
+ SAFE_FREE ();
+
if (tmo_in_millisec >= 0)
{
tmo = make_emacs_time (tmo_in_millisec / 1000,
@@ -147,12 +142,3 @@
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
-}
=== modified file 'src/xgselect.h'
--- a/src/xgselect.h 2012-06-22 21:17:42 +0000
+++ b/src/xgselect.h 2012-08-25 20:31:04 +0000
@@ -31,6 +31,4 @@
EMACS_TIME *timeout,
sigset_t *sigmask);
-extern void xgselect_initialize (void);
-
#endif /* XGSELECT_H */
=== modified file 'src/xterm.c'
--- a/src/xterm.c 2012-08-18 01:42:52 +0000
+++ b/src/xterm.c 2012-08-25 20:31:04 +0000
@@ -10815,8 +10815,6 @@
XSetIOErrorHandler (x_io_error_quitter);
signal (SIGPIPE, x_connection_signal);
-
- xgselect_initialize ();
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/trunk r109774: * xgselect.c (xg_select): Use auto storage for the GPollFD buffer,
Paul Eggert <=