got TcpServer and Thread to inherit Mmged
This commit is contained in:
@ -36,22 +36,22 @@ struct xma_xtn_t
|
||||
HeapMmgr* heap;
|
||||
};
|
||||
|
||||
HeapMmgr::HeapMmgr (qse_size_t heap_size):
|
||||
HeapMmgr::HeapMmgr (qse_size_t heap_size) QSE_CPP_NOEXCEPT:
|
||||
Mmgr(), Mmged(QSE_NULL), xma(QSE_NULL), heap_size (heap_size)
|
||||
{
|
||||
}
|
||||
|
||||
HeapMmgr::HeapMmgr (Mmgr* mmgr, qse_size_t heap_size):
|
||||
HeapMmgr::HeapMmgr (Mmgr* mmgr, qse_size_t heap_size) QSE_CPP_NOEXCEPT:
|
||||
Mmgr(), Mmged(mmgr), xma(QSE_NULL), heap_size (heap_size)
|
||||
{
|
||||
}
|
||||
|
||||
HeapMmgr::~HeapMmgr ()
|
||||
HeapMmgr::~HeapMmgr () QSE_CPP_NOEXCEPT
|
||||
{
|
||||
if (this->xma) qse_xma_close (this->xma);
|
||||
}
|
||||
|
||||
void* HeapMmgr::allocMem (qse_size_t n)
|
||||
void* HeapMmgr::allocMem (qse_size_t n) QSE_CPP_NOEXCEPT
|
||||
{
|
||||
if (!this->xma)
|
||||
{
|
||||
@ -67,7 +67,7 @@ void* HeapMmgr::allocMem (qse_size_t n)
|
||||
return xptr;
|
||||
}
|
||||
|
||||
void* HeapMmgr::reallocMem (void* ptr, qse_size_t n)
|
||||
void* HeapMmgr::reallocMem (void* ptr, qse_size_t n) QSE_CPP_NOEXCEPT
|
||||
{
|
||||
if (!this->xma)
|
||||
{
|
||||
@ -83,7 +83,7 @@ void* HeapMmgr::reallocMem (void* ptr, qse_size_t n)
|
||||
return xptr;
|
||||
}
|
||||
|
||||
void HeapMmgr::freeMem (void* ptr)
|
||||
void HeapMmgr::freeMem (void* ptr) QSE_CPP_NOEXCEPT
|
||||
{
|
||||
if (this->xma) qse_xma_free (this->xma, ptr);
|
||||
}
|
||||
|
@ -32,17 +32,17 @@
|
||||
QSE_BEGIN_NAMESPACE(QSE)
|
||||
/////////////////////////////////
|
||||
|
||||
void* Mmgr::alloc_mem (mmgr_t* mmgr, qse_size_t n)
|
||||
void* Mmgr::alloc_mem (mmgr_t* mmgr, qse_size_t n) QSE_CPP_NOEXCEPT
|
||||
{
|
||||
return ((Mmgr*)mmgr->ctx)->allocMem (n);
|
||||
}
|
||||
|
||||
void* Mmgr::realloc_mem (mmgr_t* mmgr, void* ptr, qse_size_t n)
|
||||
void* Mmgr::realloc_mem (mmgr_t* mmgr, void* ptr, qse_size_t n) QSE_CPP_NOEXCEPT
|
||||
{
|
||||
return ((Mmgr*)mmgr->ctx)->reallocMem (ptr, n);
|
||||
}
|
||||
|
||||
void Mmgr::free_mem (mmgr_t* mmgr, void* ptr)
|
||||
void Mmgr::free_mem (mmgr_t* mmgr, void* ptr) QSE_CPP_NOEXCEPT
|
||||
{
|
||||
((Mmgr*)mmgr->ctx)->freeMem (ptr);
|
||||
}
|
||||
@ -56,12 +56,12 @@ void* Mmgr::callocate (qse_size_t n, bool raise_exception)
|
||||
|
||||
Mmgr* Mmgr::dfl_mmgr = StdMmgr::getInstance();
|
||||
|
||||
Mmgr* Mmgr::getDFL ()
|
||||
Mmgr* Mmgr::getDFL () QSE_CPP_NOEXCEPT
|
||||
{
|
||||
return Mmgr::dfl_mmgr;
|
||||
}
|
||||
|
||||
void Mmgr::setDFL (Mmgr* mmgr)
|
||||
void Mmgr::setDFL (Mmgr* mmgr) QSE_CPP_NOEXCEPT
|
||||
{
|
||||
Mmgr::dfl_mmgr = mmgr;
|
||||
}
|
||||
|
@ -32,22 +32,22 @@ QSE_BEGIN_NAMESPACE(QSE)
|
||||
/////////////////////////////////
|
||||
|
||||
|
||||
void* StdMmgr::allocMem (qse_size_t n)
|
||||
void* StdMmgr::allocMem (qse_size_t n) QSE_CPP_NOEXCEPT
|
||||
{
|
||||
return ::malloc (n);
|
||||
}
|
||||
|
||||
void* StdMmgr::reallocMem (void* ptr, qse_size_t n)
|
||||
void* StdMmgr::reallocMem (void* ptr, qse_size_t n) QSE_CPP_NOEXCEPT
|
||||
{
|
||||
return ::realloc (ptr, n);
|
||||
}
|
||||
|
||||
void StdMmgr::freeMem (void* ptr)
|
||||
void StdMmgr::freeMem (void* ptr) QSE_CPP_NOEXCEPT
|
||||
{
|
||||
::free (ptr);
|
||||
}
|
||||
|
||||
StdMmgr* StdMmgr::getInstance ()
|
||||
StdMmgr* StdMmgr::getInstance () QSE_CPP_NOEXCEPT
|
||||
{
|
||||
static StdMmgr DFL;
|
||||
return &DFL;
|
||||
|
@ -86,7 +86,8 @@ int TcpServer::Client::stop () QSE_CPP_NOEXCEPT
|
||||
return 0;
|
||||
}
|
||||
|
||||
TcpServer::TcpServer () QSE_CPP_NOEXCEPT:
|
||||
TcpServer::TcpServer (Mmgr* mmgr) QSE_CPP_NOEXCEPT:
|
||||
Mmged(mmgr),
|
||||
errcode(E_ENOERR),
|
||||
stop_requested(false),
|
||||
server_serving(false),
|
||||
@ -116,7 +117,7 @@ void TcpServer::free_all_listeners () QSE_CPP_NOEXCEPT
|
||||
qse_mux_delete (this->listener_list.mux, &evt);
|
||||
|
||||
lp->close ();
|
||||
delete lp;
|
||||
this->getMmgr()->dispose(lp); //delete lp;
|
||||
}
|
||||
|
||||
if (this->listener_list.mux_pipe[0] >= 0)
|
||||
@ -175,9 +176,11 @@ void TcpServer::dispatch_mux_event (qse_mux_t* mux, const qse_mux_evt_t* evt) QS
|
||||
if (server->max_connections > 0 && server->max_connections <= server->client_list.getSize())
|
||||
{
|
||||
// too many connections. accept the connection and close it.
|
||||
|
||||
Socket s;
|
||||
SocketAddress sa;
|
||||
if (lsck->accept(&s, &sa, Socket::T_CLOEXEC) >= 0) s.close();
|
||||
// TODO: logging.
|
||||
return;
|
||||
}
|
||||
|
||||
@ -186,13 +189,15 @@ void TcpServer::dispatch_mux_event (qse_mux_t* mux, const qse_mux_evt_t* evt) QS
|
||||
// allocating the client object before accept is
|
||||
// a bit awkward. but socket.accept() can be passed
|
||||
// the socket field inside the client object.
|
||||
try { client = new Client (lsck); }
|
||||
try { client = new(server->getMmgr()) Client (lsck); }
|
||||
catch (...)
|
||||
{
|
||||
// memory alloc failed. accept the connection and close it.
|
||||
|
||||
Socket s;
|
||||
SocketAddress sa;
|
||||
if (lsck->accept(&s, &sa, Socket::T_CLOEXEC) >= 0) s.close();
|
||||
// TODO: logging.
|
||||
return;
|
||||
}
|
||||
|
||||
@ -215,7 +220,7 @@ void TcpServer::dispatch_mux_event (qse_mux_t* mux, const qse_mux_evt_t* evt) QS
|
||||
if (client->start(0) <= -1)
|
||||
#endif
|
||||
{
|
||||
delete client;
|
||||
server->getMmgr()->dispose (client); //delete client;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -223,7 +228,7 @@ void TcpServer::dispatch_mux_event (qse_mux_t* mux, const qse_mux_evt_t* evt) QS
|
||||
catch (...)
|
||||
{
|
||||
// TODO: logging.
|
||||
delete client;
|
||||
server->getMmgr()->dispose (client); //delete client;
|
||||
return;
|
||||
|
||||
}
|
||||
@ -296,7 +301,7 @@ int TcpServer::setup_listeners (const qse_char_t* addrs) QSE_CPP_NOEXCEPT
|
||||
|
||||
try
|
||||
{
|
||||
lsck = new Listener(this);
|
||||
lsck = new(this->getMmgr()) Listener(this);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
@ -393,12 +398,12 @@ int TcpServer::start (const qse_char_t* addrs) QSE_CPP_NOEXCEPT
|
||||
}
|
||||
|
||||
this->delete_all_clients ();
|
||||
if (client != QSE_NULL) delete client;
|
||||
if (client != QSE_NULL) this->getMmgr()->dispose (client); // delete client;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
this->delete_all_clients ();
|
||||
if (client != QSE_NULL) delete client;
|
||||
if (client != QSE_NULL) this->getMmgr()->dispose (client); //delete client;
|
||||
|
||||
this->setErrorCode (E_EEXCEPT);
|
||||
this->server_serving = false;
|
||||
@ -446,7 +451,7 @@ void TcpServer::delete_dead_clients () QSE_CPP_NOEXCEPT
|
||||
p->join ();
|
||||
#endif
|
||||
|
||||
delete p;
|
||||
this->getMmgr()->dispose (p); //delete p;
|
||||
np2 = np; np = np->getNextNode();
|
||||
this->client_list.remove (np2);
|
||||
continue;
|
||||
@ -478,7 +483,7 @@ void TcpServer::delete_all_clients () QSE_CPP_NOEXCEPT
|
||||
#else
|
||||
p->join ();
|
||||
#endif
|
||||
delete p;
|
||||
this->getMmgr()->dispose (p); //delete p;
|
||||
np2 = np; np = np->getNextNode();
|
||||
this->client_list.remove (np2);
|
||||
}
|
||||
|
@ -32,21 +32,20 @@ QSE_BEGIN_NAMESPACE(QSE)
|
||||
|
||||
Thread::Handle Thread::INVALID_HANDLE = QSE_THR_HND_INVALID;
|
||||
|
||||
Thread::Thread() QSE_CPP_NOEXCEPT : __exctx(QSE_NULL)
|
||||
Thread::Thread(Mmgr* mmgr) QSE_CPP_NOEXCEPT: Mmged(mmgr), __exctx(QSE_NULL)
|
||||
{
|
||||
//qse_thr_init (this, this->getMmgr());
|
||||
qse_thr_init (this, QSE_NULL);
|
||||
qse_thr_init (&this->thr, this->getMmgr());
|
||||
}
|
||||
|
||||
Thread::~Thread () QSE_CPP_NOEXCEPT
|
||||
{
|
||||
QSE_ASSERT (this->__state != QSE_THR_RUNNING);
|
||||
QSE_ASSERT (this->thr.__state != QSE_THR_RUNNING);
|
||||
// it is subclasses' responsibility to stop the thread gracefully.
|
||||
// so stop is not called here.
|
||||
// this->stop ();
|
||||
|
||||
/*if (this->__joinable)*/ this->join ();
|
||||
qse_thr_fini (this);
|
||||
/*if (this->thr.__joinable)*/ this->join ();
|
||||
qse_thr_fini (&this->thr);
|
||||
}
|
||||
|
||||
|
||||
@ -58,7 +57,7 @@ static int thr_func_call_main (qse_thr_t* thr, void* ctx)
|
||||
|
||||
int Thread::start (int flags) QSE_CPP_NOEXCEPT
|
||||
{
|
||||
return qse_thr_start(this, thr_func_call_main, this, flags);
|
||||
return qse_thr_start(&this->thr, thr_func_call_main, this, flags);
|
||||
}
|
||||
|
||||
int Thread::stop () QSE_CPP_NOEXCEPT
|
||||
@ -67,7 +66,7 @@ int Thread::stop () QSE_CPP_NOEXCEPT
|
||||
// make sure that subclasses override "stop" and call it
|
||||
// properly so that the thread can be terminated gracefully.
|
||||
// "stop" here just aborts the running thread.
|
||||
return qse_thr_stop(this);
|
||||
return qse_thr_stop(&this->thr);
|
||||
}
|
||||
|
||||
|
||||
@ -82,7 +81,7 @@ int ThreadR::thr_func_call_rtn (qse_thr_t* thr, void* ctx)
|
||||
|
||||
int ThreadR::start (ThreadRoutine rtn, int flags) QSE_CPP_NOEXCEPT
|
||||
{
|
||||
if (this->__state == QSE_THR_RUNNING) return -1;
|
||||
if (this->thr.__state == QSE_THR_RUNNING) return -1;
|
||||
|
||||
// this != (qse_thr_t*)this may not be equal if this class
|
||||
// has some internal added data fields. e.g. it contains
|
||||
@ -92,7 +91,7 @@ int ThreadR::start (ThreadRoutine rtn, int flags) QSE_CPP_NOEXCEPT
|
||||
// qse_thr_start (this, (qse_thr_rtn_t)rtn, QSE_NULL, flags);
|
||||
// so i pass a void pointer 'this' as the third argument.
|
||||
this->__tmprtn = rtn;
|
||||
return qse_thr_start(this, thr_func_call_rtn, this, flags);
|
||||
return qse_thr_start(&this->thr, thr_func_call_rtn, this, flags);
|
||||
}
|
||||
|
||||
QSE_END_NAMESPACE(QSE)
|
||||
|
Reference in New Issue
Block a user