diff options
Diffstat (limited to 'meta/packages/xorg-lib/xtrans/abstract_socket_fix.patch')
| -rw-r--r-- | meta/packages/xorg-lib/xtrans/abstract_socket_fix.patch | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/meta/packages/xorg-lib/xtrans/abstract_socket_fix.patch b/meta/packages/xorg-lib/xtrans/abstract_socket_fix.patch new file mode 100644 index 0000000000..197da0735d --- /dev/null +++ b/meta/packages/xorg-lib/xtrans/abstract_socket_fix.patch | |||
| @@ -0,0 +1,58 @@ | |||
| 1 | From 556a351de83fc6f401b02213dae95731553c216d Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Loïc Minier <lool@dooz.org> | ||
| 3 | Date: Mon, 24 Mar 2008 19:38:27 +0000 | ||
| 4 | Subject: Bug #10489: Don't retry unix socket connect()s on ENOENT. | ||
| 5 | |||
| 6 | If the socket isn't there, it's not gonna magically appear. Either it's | ||
| 7 | a server socket and you should have just waited for the SIGUSR1 from the | ||
| 8 | server, or it's a stale reference to an ICE socket. | ||
| 9 | |||
| 10 | However, do retry once, so fallback from abstract to filesystem namespace | ||
| 11 | works. | ||
| 12 | |||
| 13 | Originally Debian bug #385976. | ||
| 14 | --- | ||
| 15 | diff --git a/Xtranssock.c b/Xtranssock.c | ||
| 16 | index 8a7d2ec..da4afe9 100644 | ||
| 17 | --- a/Xtranssock.c | ||
| 18 | +++ b/Xtranssock.c | ||
| 19 | @@ -2146,8 +2146,13 @@ TRANS(SocketUNIXConnect) (XtransConnInfo ciptr, char *host, char *port) | ||
| 20 | errno = olderrno; | ||
| 21 | |||
| 22 | /* | ||
| 23 | - * If the error was ENOENT, the server may be starting up | ||
| 24 | - * and we should try again. | ||
| 25 | + * If the error was ENOENT, the server may be starting up; we used | ||
| 26 | + * to suggest to try again in this case with | ||
| 27 | + * TRANS_TRY_CONNECT_AGAIN, but this introduced problems for | ||
| 28 | + * processes still referencing stale sockets in their environment. | ||
| 29 | + * Hence, we now return a hard error, TRANS_CONNECT_FAILED, and it | ||
| 30 | + * is suggested that higher level stacks handle retries on their | ||
| 31 | + * level when they face a slow starting server. | ||
| 32 | * | ||
| 33 | * If the error was EWOULDBLOCK or EINPROGRESS then the socket | ||
| 34 | * was non-blocking and we should poll using select | ||
| 35 | @@ -2161,14 +2166,14 @@ TRANS(SocketUNIXConnect) (XtransConnInfo ciptr, char *host, char *port) | ||
| 36 | else if (olderrno == EINTR) | ||
| 37 | return TRANS_TRY_CONNECT_AGAIN; | ||
| 38 | else if (olderrno == ENOENT) { | ||
| 39 | - /* | ||
| 40 | - * If opening as abstract socket failed, try again "normally" | ||
| 41 | - */ | ||
| 42 | - if (abstract) | ||
| 43 | + /* If opening as abstract socket failed, try again normally */ | ||
| 44 | + if (abstract) { | ||
| 45 | ciptr->transptr->flags &= ~(TRANS_ABSTRACT); | ||
| 46 | - return TRANS_TRY_CONNECT_AGAIN; | ||
| 47 | - } | ||
| 48 | - else { | ||
| 49 | + return TRANS_TRY_CONNECT_AGAIN; | ||
| 50 | + } else { | ||
| 51 | + return TRANS_CONNECT_FAILED; | ||
| 52 | + } | ||
| 53 | + } else { | ||
| 54 | PRMSG (2,"SocketUNIXConnect: Can't connect: errno = %d\n", | ||
| 55 | EGET(),0, 0); | ||
| 56 | |||
| 57 | -- | ||
| 58 | cgit v0.7.2-37-g538c | ||
