summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-12-13 13:45:52 +0000
committerskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-12-13 13:45:52 +0000
commit4590182c2c88f0b9e5eb70b45e882d9381fe33b6 (patch)
tree2af566c30043265321981ae5503f496e166c3aa6 /src
parent0b8f17ed7b86eacaad99985c9261fb8735bf2cb6 (diff)
downloadhercules-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.c11
-rw-r--r--src/common/socket.h2
-rw-r--r--src/map/clif.c2
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;
}