To: vim_dev@googlegroups.com
Subject: Patch 7.3.595
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
------------

Patch 7.3.595
Problem:    The X command server responds slowly
Solution:   Change the loop that waits for replies. (Brian Burns)
Files:	    src/if_xcmdsrv.c


*** ../vim-7.3.594/src/if_xcmdsrv.c	2012-07-10 14:25:00.000000000 +0200
--- src/if_xcmdsrv.c	2012-07-10 14:44:13.000000000 +0200
***************
*** 572,632 ****
  {
      time_t	    start;
      time_t	    now;
-     time_t	    lastChk = 0;
      XEvent	    event;
!     XPropertyEvent *e = (XPropertyEvent *)&event;
! #   define SEND_MSEC_POLL 50
  
      time(&start);
!     while (endCond(endData) == 0)
      {
  	time(&now);
  	if (seconds >= 0 && (now - start) >= seconds)
  	    break;
! 	if (now != lastChk)
! 	{
! 	    lastChk = now;
! 	    if (!WindowValid(dpy, w))
! 		break;
! 	    /*
! 	     * Sometimes the PropertyChange event doesn't come.
! 	     * This can be seen in eg: vim -c 'echo remote_expr("gvim", "3+2")'
! 	     */
! 	    serverEventProc(dpy, NULL);
! 	}
  	if (localLoop)
  	{
- 	    /* Just look out for the answer without calling back into Vim */
  #ifndef HAVE_SELECT
- 	    struct pollfd   fds;
- 
- 	    fds.fd = ConnectionNumber(dpy);
- 	    fds.events = POLLIN;
  	    if (poll(&fds, 1, SEND_MSEC_POLL) < 0)
  		break;
  #else
! 	    fd_set	    fds;
! 	    struct timeval  tv;
! 
! 	    tv.tv_sec = 0;
! 	    tv.tv_usec =  SEND_MSEC_POLL * 1000;
! 	    FD_ZERO(&fds);
! 	    FD_SET(ConnectionNumber(dpy), &fds);
! 	    if (select(ConnectionNumber(dpy) + 1, &fds, NULL, NULL, &tv) < 0)
  		break;
  #endif
- 	    while (XEventsQueued(dpy, QueuedAfterReading) > 0)
- 	    {
- 		XNextEvent(dpy, &event);
- 		if (event.type == PropertyNotify && e->window == commWindow)
- 		    serverEventProc(dpy, &event);
- 	    }
  	}
  	else
  	{
  	    if (got_int)
  		break;
! 	    ui_delay((long)SEND_MSEC_POLL, TRUE);
  	    ui_breakcheck();
  	}
      }
--- 572,626 ----
  {
      time_t	    start;
      time_t	    now;
      XEvent	    event;
! 
! #define UI_MSEC_DELAY 50
! #define SEND_MSEC_POLL 500
! #ifndef HAVE_SELECT
!     struct pollfd   fds;
! 
!     fds.fd = ConnectionNumber(dpy);
!     fds.events = POLLIN;
! #else
!     fd_set	    fds;
!     struct timeval  tv;
! 
!     tv.tv_sec = 0;
!     tv.tv_usec =  SEND_MSEC_POLL * 1000;
!     FD_ZERO(&fds);
!     FD_SET(ConnectionNumber(dpy), &fds);
! #endif
  
      time(&start);
!     while (TRUE)
      {
+ 	while (XCheckWindowEvent(dpy, commWindow, PropertyChangeMask, &event))
+ 	    serverEventProc(dpy, &event);
+ 
+ 	if (endCond(endData) != 0)
+ 	    break;
+ 	if (!WindowValid(dpy, w))
+ 	    break;
  	time(&now);
  	if (seconds >= 0 && (now - start) >= seconds)
  	    break;
! 
! 	/* Just look out for the answer without calling back into Vim */
  	if (localLoop)
  	{
  #ifndef HAVE_SELECT
  	    if (poll(&fds, 1, SEND_MSEC_POLL) < 0)
  		break;
  #else
! 	    if (select(FD_SETSIZE, &fds, NULL, NULL, &tv) < 0)
  		break;
  #endif
  	}
  	else
  	{
  	    if (got_int)
  		break;
! 	    ui_delay((long)UI_MSEC_DELAY, TRUE);
  	    ui_breakcheck();
  	}
      }
*** ../vim-7.3.594/src/version.c	2012-07-10 14:25:00.000000000 +0200
--- src/version.c	2012-07-10 14:52:16.000000000 +0200
***************
*** 716,717 ****
--- 716,719 ----
  {   /* Add new patch number below this line */
+ /**/
+     595,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
104. When people ask about the Presidential Election you ask "Which country?"

 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
