summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Longbons <b.r.longbons@gmail.com>2014-04-14 16:04:57 -0700
committerBen Longbons <b.r.longbons@gmail.com>2014-04-16 11:48:33 -0700
commitf7e6cb9d26dded3f33e8da18a7b16a7e64cefd5b (patch)
tree9f30f0e4ffadc3fefa20048624a50c58bce562e4
parent66b050356abc494fd57c3b4e42d4abc61c832e8c (diff)
downloadtmwa-f7e6cb9d26dded3f33e8da18a7b16a7e64cefd5b.tar.gz
tmwa-f7e6cb9d26dded3f33e8da18a7b16a7e64cefd5b.tar.bz2
tmwa-f7e6cb9d26dded3f33e8da18a7b16a7e64cefd5b.tar.xz
tmwa-f7e6cb9d26dded3f33e8da18a7b16a7e64cefd5b.zip
Fix memory violation in delayed close
-rw-r--r--src/map/clif.cpp6
-rw-r--r--src/mmo/socket.hpp2
2 files changed, 4 insertions, 4 deletions
diff --git a/src/map/clif.cpp b/src/map/clif.cpp
index a7dcb52..ea92d15 100644
--- a/src/map/clif.cpp
+++ b/src/map/clif.cpp
@@ -1098,8 +1098,6 @@ void clif_quitsave(Session *, dumb_ptr<map_session_data> sd)
static
void clif_waitclose(TimerData *, tick_t, Session *s)
{
- // TODO: what happens if the player disconnects
- // and someone else connects?
if (s)
s->eof = 1;
}
@@ -1110,10 +1108,10 @@ void clif_waitclose(TimerData *, tick_t, Session *s)
*/
void clif_setwaitclose(Session *s)
{
- Timer(gettick() + std::chrono::seconds(5),
+ s->timed_close = Timer(gettick() + std::chrono::seconds(5),
std::bind(clif_waitclose, ph::_1, ph::_2,
s)
- ).detach();
+ );
}
/*==========================================
diff --git a/src/mmo/socket.hpp b/src/mmo/socket.hpp
index 3b411e3..256c08b 100644
--- a/src/mmo/socket.hpp
+++ b/src/mmo/socket.hpp
@@ -61,6 +61,8 @@ struct Session
/// Flag needed since structure must be freed in a server-dependent manner
bool eof;
+ /// Currently used by clif_setwaitclose
+ Timer timed_close;
/// Since this is a single-threaded application, it can't block
/// These are the read/write queues