1. 02 Jan, 2013 1 commit
  2. 24 Nov, 2012 1 commit
  3. 23 Nov, 2012 1 commit
    • Paul Eggert's avatar
      Fix a race condition with glib (Bug#8855). · 6d4e8f62
      Paul Eggert authored
      This is a backport from the trunk, consisting of:
      
      2012-11-17  Eli Zaretskii  <eliz@gnu.org>
      
      * nt/inc/sys/wait.h: New file, with prototype of waitpid and
      definitions of macros it needs.
      * nt/inc/ms-w32.h (wait): Don't define, 'wait' is not used anymore.
      (sys_wait): Remove prototype.
      * nt/config.nt (HAVE_SYS_WAIT_H): Define to 1.
      * src/w32proc.c (create_child): Don't clip the PID of the child
      process to fit into an Emacs integer, as this is no longer a
      restriction.
      (waitpid): Rename from sys_wait.  Emulate a Posix 'waitpid' by
      reaping only the process specified by PID argument, if that is
      positive.  Use PID instead of dead_child to know which process to
      reap.  Wait for the child to die only if WNOHANG is not in
      OPTIONS.
      (sys_select): Don't set dead_child.
      * src/sysdep.c (wait_for_termination_1): Remove the WINDOWSNT portion,
      as it is no longer needed.
      * src/process.c (waitpid, WUNTRACED) [!WNOHANG]: Remove definitions,
      no longer needed.
      (record_child_status_change): Remove the setting of
      record_at_most_one_child for the !WNOHANG case.
      
      2012-11-03  Paul Eggert  <eggert@cs.ucla.edu>
      
      Fix a race condition that causes Emacs to mess up glib (Bug#8855).
      This is a backport from the trunk.
      The symptom is a diagnostic "GLib-WARNING **: In call to
      g_spawn_sync(), exit status of a child process was requested but
      SIGCHLD action was set to SIG_IGN and ECHILD was received by
      waitpid(), so exit status can't be returned."  The diagnostic
      is partly wrong, as the SIGCHLD action is not set to SIG_IGN.
      The real bug is a race condition between Emacs and glib: Emacs
      does a waitpid (-1, ...) and reaps glib's subprocess by mistake,
      so that glib can't find it.  Work around the bug by invoking
      waitpid only on subprocesses that Emacs itself creates.
      * src/process.c (create_process, record_child_status_change):
      Don't use special value -1 in pid field, as the caller now must
      know the pid rather than having the callee infer it.  The
      inference was sometimes incorrect anyway, due to another race.
      (create_process): Set new 'alive' member if child is created.
      (process_status_retrieved): New function.
      (record_child_status_change): Use it.
      Accept negative 1st argument, which means to wait for the
      processes that Emacs already knows about.  Move special-case code
      for DOS_NT (which lacks WNOHANG) here, from caller.  Keep track of
      processes that have already been waited for, by testing and
      clearing new 'alive' member.
      (CAN_HANDLE_MULTIPLE_CHILDREN): Remove, as record_child_status_change
      now does this internally.
      (handle_child_signal): Let record_child_status_change do all
      the work, since we do not want to reap all exited child processes,
      only the child processes that Emacs itself created.
      * src/process.h (Lisp_Process): New boolean member 'alive'.
      6d4e8f62
  4. 23 Apr, 2012 1 commit
    • Paul Eggert's avatar
      Fix minor GTK3 problems found by static checking. · 1068fe4d
      Paul Eggert authored
      * emacsgtkfixed.c (EMACS_TYPE_FIXED, EMACS_FIXED, EmacsFixed)
      (EmacsFixedPrivate, EmacsFixedClass, struct _EmacsFixed)
      (struct _EmacsFixedClass, emacs_fixed_get_type):
      Move decls here from emacsgtkfixed.h, since they needn't be public.
      (emacs_fixed_get_type): Now static.
      (emacs_fixed_class_init): Omit unused local.
      (emacs_fixed_child_type): Remove; unused.
      * emacsgtkfixed.h (EMACS_TYPE_FIXED, EMACS_FIXED, EmacsFixed)
      (EmacsFixedPrivate, EmacsFixedClass, struct _EmacsFixed)
      (struct _EmacsFixedClass): Move to emacsgtkfixed.c.
      (EMACS_FIXED_CLASS, EMACS_IS_FIXED, EMACS_IS_FIXED_CLASS)
      (EMACS_FIXED_GET_CLASS): Remove; unused.
      * gtkutil.c (xg_create_frame_widgets) [!HAVE_GTK3]: Omit unused local.
      1068fe4d
  5. 05 Jan, 2012 1 commit
  6. 04 Dec, 2011 1 commit
  7. 26 Jun, 2011 1 commit
    • Jan Djärv's avatar
      Fix wm_size-hints race between KDE/KWin and Gtk+ 3. · c7e73be5
      Jan Djärv authored
      * emacsgtkfixed.c: State that this is only used with Gtk+3.
      (_EmacsFixedPrivate): Remove minwidth/height.
      Add struct frame *f.
      (emacs_fixed_init): Initialize priv->f.
      (get_parent_class, emacs_fixed_set_min_size): Remove.
      (emacs_fixed_new): Set priv->f to argument.
      (emacs_fixed_get_preferred_width)
      (emacs_fixed_get_preferred_height): Use min_width/height from
      frames size_hint to set minimum and natural.
      (XSetWMSizeHints, XSetWMNormalHints): Override these functions
      and use min_width/height from frames size_hint to set
      min_width/height (Bug#8919).
      
      * emacsgtkfixed.h: State that this is only used with Gtk+3.
      (emacs_fixed_set_min_size): Remove.
      (emacs_fixed_new): Take frame as argument.
      
      * gtkutil.c (xg_create_frame_widgets): Pass f to emacs_fixed_new.
      (x_wm_set_size_hint): Remove call to emacs_fixed_set_min_size. Fix
      indentation.
      c7e73be5
  8. 14 Jun, 2011 1 commit
    • Jan Djärv's avatar
      Fix resize and change of scroll bar width for Gtk3. · c195f2de
      Jan Djärv authored
      * configure.in: Add emacsgtkfixed.o to GTK_OBJ if HAVE_GTK3.
      
      * src/emacsgtkfixed.c, src/emacsgtkfixed.h: New files.
      
      * src/gtkutil.c: Include src/emacsgtkfixed.h if HAVE_GTK3.
      (int_gtk_range_get_value): Move to the scroll bar part of the file.
      (style_changed_cb): Call update_theme_scrollbar_width and call
      x_set_scroll_bar_default_width and xg_frame_set_char_size for
      all frames.
      (xg_create_frame_widgets): Call emacs_fixed_new if HAVE_GTK3 (Bug#8505).
      Call gtk_window_set_resizable if HAVE_GTK3.
      (x_wm_set_size_hint): Call emacs_fixed_set_min_size with min width
      and height if HAVE_GTK3 (Bug#8505).
      (scroll_bar_width_for_theme): New variable.
      (update_theme_scrollbar_width): New function.
      (xg_get_default_scrollbar_width): Move code to
      update_theme_scrollbar_width, just return scroll_bar_width_for_theme.
      (xg_initialize): Call update_theme_scrollbar_width.
      
      * src/gtkutil.h (xg_get_default_scrollbar_width): Remove argument.
      
      * src/xfns.c (x_set_scroll_bar_default_width): Remove argument to
      xg_get_default_scrollbar_width.
      c195f2de