|
|
|
@ -1,17 +1,19 @@ |
|
|
|
/* Copyright (C) 2000 MySQL AB |
|
|
|
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. |
|
|
|
|
|
|
|
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 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 |
|
|
|
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ |
|
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA |
|
|
|
02110-1301 USA */ |
|
|
|
|
|
|
|
/* |
|
|
|
Note that we can't have assertion on file descriptors; The reason for |
|
|
|
@ -548,7 +550,7 @@ size_t vio_read_shared_memory(Vio * vio, uchar* buf, size_t size) |
|
|
|
{ |
|
|
|
size_t length; |
|
|
|
size_t remain_local; |
|
|
|
char *current_postion; |
|
|
|
char *current_position; |
|
|
|
HANDLE events[2]; |
|
|
|
|
|
|
|
DBUG_ENTER("vio_read_shared_memory"); |
|
|
|
@ -556,7 +558,7 @@ size_t vio_read_shared_memory(Vio * vio, uchar* buf, size_t size) |
|
|
|
size)); |
|
|
|
|
|
|
|
remain_local = size; |
|
|
|
current_postion=buf; |
|
|
|
current_position=buf; |
|
|
|
|
|
|
|
events[0]= vio->event_server_wrote; |
|
|
|
events[1]= vio->event_conn_closed; |
|
|
|
@ -590,11 +592,11 @@ size_t vio_read_shared_memory(Vio * vio, uchar* buf, size_t size) |
|
|
|
if (length > remain_local) |
|
|
|
length = remain_local; |
|
|
|
|
|
|
|
memcpy(current_postion,vio->shared_memory_pos,length); |
|
|
|
memcpy(current_position,vio->shared_memory_pos,length); |
|
|
|
|
|
|
|
vio->shared_memory_remain-=length; |
|
|
|
vio->shared_memory_pos+=length; |
|
|
|
current_postion+=length; |
|
|
|
current_position+=length; |
|
|
|
remain_local-=length; |
|
|
|
|
|
|
|
if (!vio->shared_memory_remain) |
|
|
|
@ -614,7 +616,7 @@ size_t vio_write_shared_memory(Vio * vio, const uchar* buf, size_t size) |
|
|
|
{ |
|
|
|
size_t length, remain, sz; |
|
|
|
HANDLE pos; |
|
|
|
const uchar *current_postion; |
|
|
|
const uchar *current_position; |
|
|
|
HANDLE events[2]; |
|
|
|
|
|
|
|
DBUG_ENTER("vio_write_shared_memory"); |
|
|
|
@ -622,7 +624,7 @@ size_t vio_write_shared_memory(Vio * vio, const uchar* buf, size_t size) |
|
|
|
size)); |
|
|
|
|
|
|
|
remain = size; |
|
|
|
current_postion = buf; |
|
|
|
current_position = buf; |
|
|
|
|
|
|
|
events[0]= vio->event_server_read; |
|
|
|
events[1]= vio->event_conn_closed; |
|
|
|
@ -640,9 +642,9 @@ size_t vio_write_shared_memory(Vio * vio, const uchar* buf, size_t size) |
|
|
|
|
|
|
|
int4store(vio->handle_map,sz); |
|
|
|
pos = vio->handle_map + 4; |
|
|
|
memcpy(pos,current_postion,sz); |
|
|
|
memcpy(pos,current_position,sz); |
|
|
|
remain-=sz; |
|
|
|
current_postion+=sz; |
|
|
|
current_position+=sz; |
|
|
|
if (!SetEvent(vio->event_client_wrote)) |
|
|
|
DBUG_RETURN((size_t) -1); |
|
|
|
} |
|
|
|
|