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

Initial wait on connect is wrong direction

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed (View Workflow)
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 2.1
    • Fix Version/s: 2.2.0
    • Component/s: None
    • Labels:
      None
    • Environment:
      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

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

              Dates

              Created:
              Updated:
              Resolved:

                Git Integration