Hide Forgot
Description of problem: Due to a bug in rhevm webadmin, bug 1073440, it is possible to open a second spice console. by doing so the spice plugin crushes. Version-Release number of selected component (if applicable): Was tested on rhevm av2 spice-xpi version: spice-xpi-2.7-22.el6.x86_64 rhel version: Red Hat Enterprise Linux Workstation release 6.4 (Santiago) firefox: 17.0.10 In firefox top bar, this message appear: The spice firefox plugin has crushed to learn more (link): Link : https://support.mozilla.org/en-US/kb/send-plugin-crash-reports-help-improve-firefox?redirectlocale=en-US&as=u&redirectslug=Plugin+crash+reports&utm_source=inproduct How reproducible: 100% Expected results: There shouldn't be a crash. Even after bug 1073440, will be fixed, we need to make sure the spice-xpi shouldn't crush. Additional info: It can be overcome by reload the page.
Created attachment 871448 [details] /var/log/messages /var/log/messages
I can reproduce, the plugin tries to connect unsuccessfully to the unix socket for a few seconds, and the crashes.
firefox by default will kill the plugin after 45s of hanging. By default, the xpi plugin will take up to 55s... we can lower this to 10s imho, with 1 tries every 10s.. With this change, it no longer crashes. --- a/SpiceXPI/src/plugin/controller.cpp +++ b/SpiceXPI/src/plugin/controller.cpp @@ -124,14 +124,13 @@ int SpiceController::Connect() int SpiceController::Connect(const int nRetries) { int rc = -1; - int sleep_time = 0; + int sleep_time = 1; // try to connect for specified count for (int i = 0; rc != 0 && i < nRetries; ++i) { rc = Connect(); sleep(sleep_time); - ++sleep_time; } return rc; Secondly, if the pipe is already connected, connect() returns -1 with EISCONN errno. So this would fail immediately: --- a/SpiceXPI/src/plugin/controller.cpp +++ b/SpiceXPI/src/plugin/controller.cpp @@ -110,6 +110,8 @@ int SpiceController::Connect() int rc = connect(m_client_socket, (struct sockaddr *) &remote, strlen(remote.sun_path) + sizeof(remote.sun_family)); if (rc == -1) { + if (errno == EISCONN) + return 1; QErrorHandler(errno, "connect error"); LOG_DEBUG("Connect Error"); } @@ -130,6 +132,8 @@ int SpiceController::Connect(const int nRetries) for (int i = 0; rc != 0 && i < nRetries; ++i) { rc = Connect(); + if (rc == 1) + break; sleep(sleep_time); }
http://lists.freedesktop.org/archives/spice-devel/2014-March/016283.html
*** Bug 1057570 has been marked as a duplicate of this bug. ***
*** Bug 1066971 has been marked as a duplicate of this bug. ***
Should probably be cloned to RHEL7 as well
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. http://rhn.redhat.com/errata/RHBA-2014-1560.html