diff --git a/src/bus-proxyd/proxy.c b/src/bus-proxyd/proxy.c index 0c851f93c14..c6896188533 100644 --- a/src/bus-proxyd/proxy.c +++ b/src/bus-proxyd/proxy.c @@ -719,13 +719,21 @@ static int proxy_process_destination_to_local(Proxy *p) { /* Return the error to the client, if we can */ synthetic_reply_method_errnof(m, r, "Failed to forward message we got from destination: %m"); - log_error_errno(r, - "Failed to forward message we got from destination: uid=" UID_FMT " gid=" GID_FMT" message=%s destination=%s path=%s interface=%s member=%s: %m", - p->local_creds.uid, p->local_creds.gid, bus_message_type_to_string(m->header->type), - strna(m->destination), strna(m->path), strna(m->interface), strna(m->member)); + if (r == -ENOBUFS) { + /* if local dbus1 peer does not dispatch its queue, warn only once */ + if (!p->queue_overflow) + log_error("Dropped messages due to queue overflow of local peer (pid: "PID_FMT" uid: "UID_FMT")", p->local_creds.pid, p->local_creds.uid); + p->queue_overflow = true; + } else + log_error_errno(r, + "Failed to forward message we got from destination: uid=" UID_FMT " gid=" GID_FMT" message=%s destination=%s path=%s interface=%s member=%s: %m", + p->local_creds.uid, p->local_creds.gid, bus_message_type_to_string(m->header->type), + strna(m->destination), strna(m->path), strna(m->interface), strna(m->member)); + return 1; } + p->queue_overflow = false; return 1; } diff --git a/src/bus-proxyd/proxy.h b/src/bus-proxyd/proxy.h index 172bc7f569b..ff278a24652 100644 --- a/src/bus-proxyd/proxy.h +++ b/src/bus-proxyd/proxy.h @@ -38,6 +38,7 @@ struct Proxy { SharedPolicy *policy; bool got_hello : 1; + bool queue_overflow : 1; }; int proxy_new(Proxy **out, int in_fd, int out_fd, const char *dest);