To: vim_dev@googlegroups.com Subject: Patch 7.3.595 Fcc: outbox From: Bram Moolenaar 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 ///