diff options
| author | Karl Chen | 2011-02-18 17:28:09 -0500 |
|---|---|---|
| committer | Stefan Monnier | 2011-02-18 17:28:09 -0500 |
| commit | b166dcd8bb8bf236ca43f62175b636ff3965862c (patch) | |
| tree | 56814f8b134ba0c934eb6fd81ffd16e8bded1234 /lib-src/emacsclient.c | |
| parent | e697fcfc0121d210c7acb16e3306cf7c552cf633 (diff) | |
| download | emacs-b166dcd8bb8bf236ca43f62175b636ff3965862c.tar.gz emacs-b166dcd8bb8bf236ca43f62175b636ff3965862c.zip | |
* lib-src/emacsclient.c (main): Loop while `recv' return EINTR.
Diffstat (limited to 'lib-src/emacsclient.c')
| -rw-r--r-- | lib-src/emacsclient.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c index e5484b987e2..3670e68e3b3 100644 --- a/lib-src/emacsclient.c +++ b/lib-src/emacsclient.c | |||
| @@ -1708,10 +1708,21 @@ main (int argc, char **argv) | |||
| 1708 | fsync (1); | 1708 | fsync (1); |
| 1709 | 1709 | ||
| 1710 | /* Now, wait for an answer and print any messages. */ | 1710 | /* Now, wait for an answer and print any messages. */ |
| 1711 | while (exit_status == EXIT_SUCCESS | 1711 | while (exit_status == EXIT_SUCCESS) |
| 1712 | && (rl = recv (emacs_socket, string, BUFSIZ, 0)) > 0) | ||
| 1713 | { | 1712 | { |
| 1714 | char *p; | 1713 | char *p; |
| 1714 | do | ||
| 1715 | { | ||
| 1716 | errno = 0; | ||
| 1717 | rl = recv (emacs_socket, string, BUFSIZ, 0); | ||
| 1718 | } | ||
| 1719 | /* If we receive a signal (e.g. SIGWINCH, which we pass | ||
| 1720 | through to Emacs), on some OSes we get EINTR and must retry. */ | ||
| 1721 | while (rl < 0 && errno == EINTR); | ||
| 1722 | |||
| 1723 | if (rl <= 0) | ||
| 1724 | break; | ||
| 1725 | |||
| 1715 | string[rl] = '\0'; | 1726 | string[rl] = '\0'; |
| 1716 | 1727 | ||
| 1717 | p = string + strlen (string) - 1; | 1728 | p = string + strlen (string) - 1; |