54 lines
1.3 KiB
Diff
54 lines
1.3 KiB
Diff
There is a potential issue with the fastop code in pseudo since a process may
|
|
exit and allow some other function to run before the server has processed
|
|
the commands run by the process. Issues have been see with unpredictable
|
|
file permissions.
|
|
|
|
To avoid this, we ping the server before exitting which guarantees it has
|
|
processed the current command queue.
|
|
|
|
Debugged-by: RP
|
|
Fix written by peter.seebach@windriver.com
|
|
|
|
Upstream-Status: Submitted
|
|
|
|
[YOCTO #5132]
|
|
|
|
diff --git a/pseudo_client.c b/pseudo_client.c
|
|
index f58ce4c..20943b6 100644
|
|
--- a/pseudo_client.c
|
|
+++ b/pseudo_client.c
|
|
@@ -75,6 +75,9 @@ static int nfds = 0;
|
|
static int messages = 0;
|
|
static struct timeval message_time = { .tv_sec = 0 };
|
|
static int pseudo_inited = 0;
|
|
+
|
|
+static int sent_messages = 0;
|
|
+
|
|
int pseudo_nosymlinkexp = 0;
|
|
|
|
/* note: these are int, not uid_t/gid_t, so I can use 'em with scanf */
|
|
@@ -711,6 +714,11 @@ client_ping(void) {
|
|
return 0;
|
|
}
|
|
|
|
+static void
|
|
+void_client_ping(void) {
|
|
+ client_ping();
|
|
+}
|
|
+
|
|
int
|
|
pseudo_fd(int fd, int how) {
|
|
int newfd;
|
|
@@ -1043,6 +1051,11 @@ pseudo_client_op(pseudo_op_t op, int access, int fd, int dirfd, const char *path
|
|
/* disable wrappers */
|
|
pseudo_antimagic();
|
|
|
|
+ if (!sent_messages) {
|
|
+ sent_messages = 1;
|
|
+ atexit(void_client_ping);
|
|
+ }
|
|
+
|
|
if (op == OP_RENAME) {
|
|
va_list ap;
|
|
va_start(ap, buf);
|