mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
a5b881594d
All client functions that can block on I/O have alternate _start() and _cont() versions that do not block but return control back to the application, which can then issue I/O wait in its own fashion and later call back into the library to continue the operation. Works behind the scenes by spawning a co-routine/fiber to run the blocking operation and suspend it while waiting for I/O. This co-routine/fiber use is invisible to applications. For i368/x86_64 on GCC, uses very fast assembler co-routine support. On Windows uses native Win32 Fibers. Falls back to POSIX ucontext on other platforms. Assembler routines for more platforms are relatively easy to add by extending mysys/my_context.c, eg. similar to the Lua lcoco library. For testing, mysqltest and mysql_client_test are extended with the option --non-blocking-api. This causes the programs to use the non-blocking API for database access. mysql-test-run.pl has a similar option --non-blocking-api that uses this, as well as additional testcases. An example program tests/async_queries.c is included that uses the new non-blocking API with libevent to show how, in a single-threaded program, to issue many queries in parallel against a database. client/async_example.c: Fix const warning ****** Fix bug with wrong timeout value for poll(). include/Makefile.am: Fix missing include for `make dist` include/mysql.h: Add prototypes for all non-blocking API calls. include/mysql.h.pp: Add prototypes for all non-blocking API calls. mysys/my_context.c: Fix type warning for makecontext() function pointer argument. sql-common/mysql_async.c: Fix crashes in the non-blocking API for functions that can take MYSQL argument that is NULL. tests/Makefile.am: Add header file to `make dist` tests/mysql_client_test.c: Replace blocking calls with wrappers around the non-blocking calls, used in mysql_client_test to test the new non-blocking API. tests/nonblock-wrappers.h: Replace blocking calls with wrappers around the non-blocking calls, used in mysql_client_test to test the new non-blocking API.
21 lines
612 B
Text
21 lines
612 B
Text
# We currently only have named pipe support on windows, so
|
|
# in order to optimize things we skip this test on all
|
|
# other platforms
|
|
--source include/windows.inc
|
|
# Named pipe does not support the non-blocking API.
|
|
--disable_non_blocking_api
|
|
|
|
# Only run this test if named pipe is avaliable
|
|
let $nmp= query_get_value("SHOW VARIABLES LIKE 'named_pipe'", Value, 1);
|
|
if (`SELECT '$nmp' != 'ON'`){
|
|
skip No named pipe support;
|
|
}
|
|
|
|
# Connect using named pipe for testing
|
|
connect(pipe_con,localhost,root,,,,,PIPE);
|
|
|
|
# Source select test case
|
|
-- source include/common-tests.inc
|
|
|
|
connection default;
|
|
disconnect pipe_con;
|