diff options
author | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-12-13 13:45:52 +0000 |
---|---|---|
committer | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-12-13 13:45:52 +0000 |
commit | 4590182c2c88f0b9e5eb70b45e882d9381fe33b6 (patch) | |
tree | 2af566c30043265321981ae5503f496e166c3aa6 /src | |
parent | 0b8f17ed7b86eacaad99985c9261fb8735bf2cb6 (diff) | |
download | hercules-4590182c2c88f0b9e5eb70b45e882d9381fe33b6.tar.gz hercules-4590182c2c88f0b9e5eb70b45e882d9381fe33b6.tar.bz2 hercules-4590182c2c88f0b9e5eb70b45e882d9381fe33b6.tar.xz hercules-4590182c2c88f0b9e5eb70b45e882d9381fe33b6.zip |
- Modified flush_fifo so you can decide whether to block the current thread or not until the data is sent. The server-tick reply no longer blocks the current thread.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@9486 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src')
-rw-r--r-- | src/common/socket.c | 11 | ||||
-rw-r--r-- | src/common/socket.h | 2 | ||||
-rw-r--r-- | src/map/clif.c | 2 |
3 files changed, 10 insertions, 5 deletions
diff --git a/src/common/socket.c b/src/common/socket.c index fafa229df..19a2ecdea 100644 --- a/src/common/socket.c +++ b/src/common/socket.c @@ -283,14 +283,19 @@ static int send_from_fifo(int fd) return 0; } -void flush_fifo(int fd) +void flush_fifo(int fd, int lock) { - if(session[fd] != NULL && session[fd]->func_send == send_from_fifo) - { + if(session[fd] == NULL || session[fd]->func_send != send_from_fifo) + return; + if (lock) + { //Lock the thread until data is sent. set_nonblocking(fd, 1); send_from_fifo(fd); set_nonblocking(fd, 0); + return; } + //Send without locking the thread. + send_from_fifo(fd); } void flush_fifos(void) diff --git a/src/common/socket.h b/src/common/socket.h index 9552575f3..b1565b488 100644 --- a/src/common/socket.h +++ b/src/common/socket.h @@ -158,7 +158,7 @@ void do_close(int fd); void socket_init(void); void socket_final(void); -extern void flush_fifo(int fd); +extern void flush_fifo(int fd, int lock); extern void flush_fifos(void); extern void set_nonblocking(int fd, int yes); diff --git a/src/map/clif.c b/src/map/clif.c index 66711d1b2..751c3b788 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -8502,7 +8502,7 @@ void clif_parse_TickSend(int fd, struct map_session_data *sd) { WFIFOW(fd,0)=0x7f; WFIFOL(fd,2)=gettick(); WFIFOSET(fd,packet_len_table[0x7f]); - flush_fifo(fd); // send immediatly so the client gets accurate "pings" + flush_fifo(fd,0); // send immediatly so the client gets accurate "pings" return; } |