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 -- [email protected] -- 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    ///

-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Raspunde prin e-mail lui