| 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 |
| |
| |
| |
| |
| |
| *** 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(); |
| } |
| } |
| |
| |
| |
| *** 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 /// |