[PATCH vdagent-linux] vdagentd: send monitors config to currently active agent only

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Sending monitors config to all agents will results in unnecessary work
from some of them, or racy behaviour. Currently, several session agent
sharing the same X session may want to create or modify the same mode
resulting in X errors:

spice-vdagent[2985]: received monitor 0 config 1440x823+0+0
spice-vdagent[2985]: after zeroing: 1, 1
spice-vdagent[2985]: received monitor 0 config 1440x823+0+0
X Error of failed request:  BadName (named color or font does not exist)
  Major opcode of failed request:  139 (RANDR)
  Minor opcode of failed request:  16 (RRCreateMode)
  Serial number of failed request:  52
  Current serial number in output stream:  52

(gdb) bt
    width=1440, height=823) at src/vdagent-x11-randr.c:310
    x=0, y=0, width=1440, height=823) at src/vdagent-x11-randr.c:336
    mon_config=0x61a020) at src/vdagent-x11-randr.c:662

On server side, the error is triggered when the second RRModeCreateUser is received:

Breakpoint 1, RRModeCreateUser (pScreen=0xb36700, modeInfo=0xbfd7d8, name=0xbfd7f8 "vdagent-0", error=0x7ffff4dcb794) at rrmode.c:146
146            mode = RRModeFindByName(name, modeInfo->nameLength);
(gdb) n
147       if (mode) {
(gdb)
148           *error = BadName;
(gdb)
149           return NULL;

https://bugzilla.redhat.com/show_bug.cgi?id=872633
---
 src/vdagentd.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/vdagentd.c b/src/vdagentd.c
index a4db935..02e73ca 100644
--- a/src/vdagentd.c
+++ b/src/vdagentd.c
@@ -130,9 +130,9 @@ static void do_client_monitors(struct vdagent_virtio_port *vport, int port_nr,
     }
     memcpy(mon_config, new_monitors, size);
 
-    /* Send monitor config to currently connected agents */
-    udscs_server_write_all(server, VDAGENTD_MONITORS_CONFIG, 0, 0,
-                           (uint8_t *)mon_config, size);
+    /* Send monitor config to currently active agent */
+    udscs_write(active_session_conn, VDAGENTD_MONITORS_CONFIG, 0, 0,
+                (uint8_t *)mon_config, size);
 
     /* Acknowledge reception of monitors config to spice server / client */
     reply.type  = VD_AGENT_MONITORS_CONFIG;
-- 
1.7.11.7

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]