aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/modules/objects/KvsObject_socket.cpp18
-rw-r--r--src/modules/objects/KvsObject_socket.h8
2 files changed, 15 insertions, 11 deletions
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,&params);
- if (retv)
+ KviKvsVariant retv(ret);
+ callFunction(this,"incomingConnectionEvent",&retv,&params);
+ 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);