From 0df1229461ea6ea9d7f28f17efc0ba10ca8b8a42 Mon Sep 17 00:00:00 2001 From: Noldor73 Date: Wed, 20 Apr 2016 13:23:34 +0200 Subject: Fix in kvs socket class: incomingConnectionEvent --- src/modules/objects/KvsObject_socket.cpp | 18 +++++++++++------- src/modules/objects/KvsObject_socket.h | 8 ++++---- 2 files changed, 15 insertions(+), 11 deletions(-) (limited to 'src/modules') diff --git a/src/modules/objects/KvsObject_socket.cpp b/src/modules/objects/KvsObject_socket.cpp index 1f64b4043..b084f1655 100644 --- a/src/modules/objects/KvsObject_socket.cpp +++ b/src/modules/objects/KvsObject_socket.cpp @@ -303,6 +303,7 @@ bool KvsObject_socket::init(KviKvsRunTimeContext *c,KviKvsVariantList *) m_pServer = 0; m_pContext = c ; makeConnections(); + bIsSetFromExternal = false; return true; } @@ -311,11 +312,14 @@ KVSO_BEGIN_CONSTRUCTOR(KvsObject_socket,KviKvsObject) KVSO_END_CONSTRUCTOR(KvsObject_socket) KVSO_BEGIN_DESTRUCTOR(KvsObject_socket) - if (m_pSocket) + if (m_pSocket && !bIsSetFromExternal) + { + m_pSocket->close(); delete m_pSocket; + } m_pSocket = 0; if (m_pServer) - delete m_pServer; + delete m_pServer; m_pServer = 0; KVSO_END_DESTRUCTOR(KvsObject_socket) //---------------------- @@ -676,18 +680,18 @@ void KvsObject_socket::slotStateChanged( QAbstractSocket::SocketState socketStat void KvsObject_socket::slotNewConnection() { - qDebug ("New connection"); QTcpSocket *pSocket = m_pServer->nextPendingConnection(); KviKvsObjectClass * pClass = KviKvsKernel::instance()->objectController()->lookupClass("socket"); KviKvsVariantList lParams; - KviKvsObject * pObject = pClass->allocateInstance(0,"internalsocket",m_pContext,&lParams); + KviKvsObject * pObject = pClass->allocateInstance(this,"internalsocket",m_pContext,&lParams); ((KvsObject_socket *)pObject)->setInternalSocket(pSocket); kvs_hobject_t hobj=pObject->handle(); KviKvsVariantList params(new KviKvsVariant(hobj)); bool ret=false; - KviKvsVariant *retv=new KviKvsVariant(ret); - callFunction(this,"incomingConnectionEvent",retv,¶ms); - if (retv) + KviKvsVariant retv(ret); + callFunction(this,"incomingConnectionEvent",&retv,¶ms); + ret=retv.asBoolean(); + if (ret) { pObject=KviKvsKernel::instance()->objectController()->lookupObject(hobj); if (pObject) pObject->dieNow(); diff --git a/src/modules/objects/KvsObject_socket.h b/src/modules/objects/KvsObject_socket.h index d4ec6a625..bec11b60f 100644 --- a/src/modules/objects/KvsObject_socket.h +++ b/src/modules/objects/KvsObject_socket.h @@ -39,6 +39,7 @@ protected: QAbstractSocket *m_pSocket; QTcpServer *m_pServer; KviKvsRunTimeContext *m_pContext; + bool bIsSetFromExternal; protected: virtual bool init(KviKvsRunTimeContext * pContext,KviKvsVariantList *pParams); const char * getStateString(QAbstractSocket::SocketState); @@ -47,6 +48,8 @@ protected: { delete m_pSocket; m_pSocket=pSocket; + bIsSetFromExternal = true; + makeConnections(); } bool status(KviKvsObjectFunctionCall *c); @@ -55,16 +58,13 @@ protected: bool localPort(KviKvsObjectFunctionCall *c); bool localIp(KviKvsObjectFunctionCall *c); bool functionConnect(KviKvsObjectFunctionCall *c); - bool close(KviKvsObjectFunctionCall *c); bool read(KviKvsObjectFunctionCall *c); bool write(KviKvsObjectFunctionCall *c); bool bytesAvailable(KviKvsObjectFunctionCall *c); bool setProtocol(KviKvsObjectFunctionCall *c); //bool setReadBufferSize(KviKvsObjectFunctionCall *c); - bool listen(KviKvsObjectFunctionCall *c); - - + bool listen(KviKvsObjectFunctionCall *c); bool dataAvailableEvent(KviKvsObjectFunctionCall *c); bool incomingConnectionEvent(KviKvsObjectFunctionCall *c); bool connectedEvent(KviKvsObjectFunctionCall *c); -- cgit v1.3.1-10-gc9f91