emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs-24 r117674: * src/xgselect.c (xg_select): Use g_main


From: Stefan Monnier
Subject: [Emacs-diffs] emacs-24 r117674: * src/xgselect.c (xg_select): Use g_main_context_acquire.
Date: Thu, 06 Nov 2014 03:02:21 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 117674
revision-id: address@hidden
parent: address@hidden
fixes bug: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=18861
author: Dima Kogan <address@hidden>
committer: Stefan Monnier <address@hidden>
branch nick: emacs-24
timestamp: Wed 2014-11-05 22:02:11 -0500
message:
  * src/xgselect.c (xg_select): Use g_main_context_acquire.
modified:
  src/ChangeLog                  changelog-20091113204419-o5vbwnq5f7feedwu-1438
  src/xgselect.c                 xgselect.c-20091121171556-bypaf8oo9ygoo13w-2
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2014-11-05 11:23:10 +0000
+++ b/src/ChangeLog     2014-11-06 03:02:11 +0000
@@ -1,3 +1,7 @@
+2014-11-06  Dima Kogan  <address@hidden>
+
+       * xgselect.c (xg_select): Use g_main_context_acquire (bug#18861).
+
 2014-11-05  Michael Albinus  <address@hidden>
 
        * dired.c (Ffile_attributes): Return Qnil, if Fexpand_file_name

=== modified file 'src/xgselect.c'
--- a/src/xgselect.c    2014-04-21 15:55:28 +0000
+++ b/src/xgselect.c    2014-11-06 03:02:11 +0000
@@ -55,19 +55,28 @@
   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;
+  bool context_acquired = false;
+  int i, nfds, tmo_in_millisec = -1;
   bool need_to_dispatch;
   USE_SAFE_ALLOCA;
 
   context = g_main_context_default ();
+  context_acquired = g_main_context_acquire (context);
+  /* FIXME: If we couldn't acquire the context, we just silently proceed
+     because this function handles more than just glib file descriptors.
+     Note that, as implemented, this failure is completely silent: there is
+     no feedback to the caller.  */
 
   if (rfds) all_rfds = *rfds;
   else FD_ZERO (&all_rfds);
   if (wfds) all_wfds = *wfds;
   else FD_ZERO (&all_wfds);
 
-  n_gfds = g_main_context_query (context, G_PRIORITY_LOW, &tmo_in_millisec,
-                                gfds, gfds_size);
+  n_gfds = (context_acquired
+           ? g_main_context_query (context, G_PRIORITY_LOW, &tmo_in_millisec,
+                                   gfds, gfds_size)
+           : -1);
+
   if (gfds_size < n_gfds)
     {
       SAFE_NALLOCA (gfds, sizeof *gfds, n_gfds);
@@ -152,6 +161,9 @@
       errno = pselect_errno;
     }
 
+  if (context_acquired)
+    g_main_context_release (context);
+
   /* To not have to recalculate timeout, return like this.  */
   if ((our_fds > 0 || (nfds == 0 && tmop == &tmo)) && (retval == 0))
     {


reply via email to

[Prev in Thread] Current Thread [Next in Thread]