summaryrefslogtreecommitdiffstats
path: root/sql/threadpool_winsockets.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-13 12:24:36 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-13 12:24:36 +0000
commit06eaf7232e9a920468c0f8d74dcf2fe8b555501c (patch)
treee2c7b5777f728320e5b5542b6213fd3591ba51e2 /sql/threadpool_winsockets.h
parentInitial commit. (diff)
downloadmariadb-06eaf7232e9a920468c0f8d74dcf2fe8b555501c.tar.xz
mariadb-06eaf7232e9a920468c0f8d74dcf2fe8b555501c.zip
Adding upstream version 1:10.11.6.upstream/1%10.11.6
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sql/threadpool_winsockets.h')
-rw-r--r--sql/threadpool_winsockets.h80
1 files changed, 80 insertions, 0 deletions
diff --git a/sql/threadpool_winsockets.h b/sql/threadpool_winsockets.h
new file mode 100644
index 00000000..ca2068b7
--- /dev/null
+++ b/sql/threadpool_winsockets.h
@@ -0,0 +1,80 @@
+/* Copyright (C) 2020 Monty Program Ab
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
+ */
+#pragma once
+
+#include <WinSock2.h>
+#include <windows.h>
+
+struct st_vio;
+
+struct win_aiosocket
+{
+ /** OVERLAPPED is needed by all Windows AIO*/
+ OVERLAPPED m_overlapped{};
+ /** Handle to pipe, or socket */
+ HANDLE m_handle{};
+ /** Whether the m_handle refers to pipe*/
+ bool m_is_pipe{};
+
+ /* Read buffer handling */
+
+ /** Pointer to buffer of size READ_BUFSIZ. Can be NULL.*/
+ char *m_buf_ptr{};
+ /** Offset to current buffer position*/
+ size_t m_buf_off{};
+ /** Size of valid data in the buffer*/
+ size_t m_buf_datalen{};
+
+ /* Vio handling */
+ /** Pointer to original vio->vio_read/vio->has_data function */
+ size_t (*m_orig_vio_read)(st_vio *, unsigned char *, size_t){};
+ char (*m_orig_vio_has_data)(st_vio *){};
+
+
+
+ /**
+ Begins asynchronnous reading from socket/pipe.
+ On IO completion, pre-read some bytes into internal buffer
+ */
+ DWORD begin_read();
+
+ /**
+ Update number of bytes returned, and IO error status
+
+ Should be called right after IO is completed
+ GetQueuedCompletionStatus() , or threadpool IO completion
+ callback would return nbytes and the error.
+
+ Sets the valid data length in the read buffer.
+ */
+ void end_read(ULONG nbytes, DWORD err);
+
+ /**
+ Override VIO routines with ours, accounting for
+ one-shot buffering.
+ */
+ void init(st_vio *vio);
+
+ /** Return number of unread bytes.*/
+ size_t buffer_remaining();
+
+ /* Frees the read buffer.*/
+ ~win_aiosocket();
+};
+
+/* Functions related to IO buffers caches.*/
+extern void init_win_aio_buffers(unsigned int n_buffers);
+extern void destroy_win_aio_buffers();