Uploaded image for project: 'MariaDB Connector/C'
  1. MariaDB Connector/C
  2. CONC-130

Initial wait on connect is wrong direction

    XMLWordPrintable

Details

    • Bug
    • Status: Closed (View Workflow)
    • Minor
    • Resolution: Fixed
    • 2.1
    • 2.2.0
    • None
    • None
    • All

    Description

      This is the block of code from libmariadb.c:

        if (mysql->options.connect_timeout >= 0 &&
            vio_wait_or_timeout(net->vio, FALSE, mysql->options.connect_timeout * 1000) < 1)
        {
          my_set_error(mysql, CR_SERVER_LOST, SQLSTATE_UNKNOWN,
                       ER(CR_SERVER_LOST_EXTENDED),
                       "handshake: waiting for inital communication packet",
                       errno);
          goto error;
        }

      The second option of vio_wait_or_timeout() is "my_bool is_read". If set to true, it waits for a read. If set to false, it waits for a write. The code above is waiting to read a packet from the server, so it should be TRUE. However, it is false, so it waits for a write instead. Since this happens immediately after it has already waited for the connection, this always returns immediately. However, on async it passes the wrong flags (i.e. WAIT_WRITE instead of WAIT_READ) to the async caller, which messes up edge-triggered event handling. It also means that it does not actually wait for the timeout that it is supposed to be waiting for.

      Attachments

        Activity

          People

            georg Georg Richter
            A812371 Matt Fagan
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Git Integration

                Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.