diff --git a/7.3.595 b/7.3.595 new file mode 100644 index 0000000..0fc9b52 --- /dev/null +++ b/7.3.595 @@ -0,0 +1,154 @@ +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 ///