[CONC-130] Initial wait on connect is wrong direction Created: 2015-06-09 Updated: 2020-11-16 Resolved: 2015-09-08 |
|
| Status: | Closed |
| Project: | MariaDB Connector/C |
| Component/s: | None |
| Affects Version/s: | 2.1 |
| Fix Version/s: | 2.2.0 |
| Type: | Bug | Priority: | Minor |
| Reporter: | Matt Fagan | Assignee: | Georg Richter |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | None | ||
| Environment: |
All |
||
| Description |
|
This is the block of code from libmariadb.c:
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. |
| Comments |
| Comment by Georg Richter [ 2015-09-08 ] |
|
Fixed in C/C 2.2: commit 7b59e09cf5eecda2029295db10fdc98dfb5dacc3 |
| Comment by Henrik Grubbström [ 2015-09-21 ] |
|
Seems this patch also slipped in a change to switch the socket to non-blocking mode: {{- else if (socket_block(sock, 1) == SOCKET_ERROR) |