- delete children instance in destroy function.
so, you never delete returned instance
Change-Id: I5e00e91a87483766a7fda653b8de5d969e719023
+
+ for (i = 0; i < sessions.size(); i++)
+ {
+ delete (Session *)sessions[i];
+ }
+
+ sessions.clear();
}
void Reader::closeSessions()
}
void Reader::closeSessions()
for (i = 0; i < sessions.size(); i++)
{
sessions[i]->closeSync();
for (i = 0; i < sessions.size(); i++)
{
sessions[i]->closeSync();
- delete (Session *)sessions[i];
}
void Reader::getPackageCert()
}
void Reader::getPackageCert()
SEService::~SEService()
{
SEService::~SEService()
{
- shutdownSync();
- }
-
- void SEService::shutdown()
- {
for (i = 0; i < readers.size(); i++)
{
for (i = 0; i < readers.size(); i++)
{
- readers[i]->closeSessions();
delete (Reader *)readers[i];
}
delete (Reader *)readers[i];
}
+ void SEService::shutdown()
+ {
+ if (connected == true)
+ {
+ uint32_t i;
- msg.message = Message::MSG_REQUEST_SHUTDOWN;
- msg.error = (unsigned int)this; /* using error to context */
- msg.caller = (void *)this;
- msg.callback = (void *)this; /* if callback is class instance, it means synchronized call */
+ for (i = 0; i < readers.size(); i++)
+ {
+ readers[i]->closeSessions();
+ }
- if (ClientIPC::getInstance().sendMessage(&msg) == false)
- {
- SCARD_DEBUG_ERR("time over");
+ Message msg;
+
+ msg.message = Message::MSG_REQUEST_SHUTDOWN;
+ msg.error = (unsigned int)this; /* using error to context */
+ msg.caller = (void *)this;
+ msg.callback = (void *)this; /* if callback is class instance, it means synchronized call */
+
+ if (ClientIPC::getInstance().sendMessage(&msg) == false)
+ {
+ SCARD_DEBUG_ERR("time over");
+ }
for (i = 0; i < readers.size(); i++)
{
readers[i]->closeSessions();
for (i = 0; i < readers.size(); i++)
{
readers[i]->closeSessions();
- delete (Reader *)readers[i];
/* send message to load se */
int rv;
Message msg;
/* send message to load se */
int rv;
Message msg;
+ size_t i;
+
+ closeSync();
+
+ for (i = 0; i < channels.size(); i++)
+ {
+ delete (ClientChannel *)channels[i];
+ }
+
+ channels.clear();
}
void Session::closeChannels()
}
void Session::closeChannels()
for (i = 0; i < channels.size(); i++)
{
channels[i]->closeSync();
for (i = 0; i < channels.size(); i++)
{
channels[i]->closeSync();
- delete (ClientChannel *)channels[i];
}
ByteArray Session::getATRSync()
}
ByteArray Session::getATRSync()
namespace smartcard_service_api
{
namespace smartcard_service_api
{
- SEServiceHelper::SEServiceHelper()
- {
- connected = false;
- }
-
SEServiceHelper::~SEServiceHelper()
{
SCARD_BEGIN();
SEServiceHelper::~SEServiceHelper()
{
SCARD_BEGIN();
- vector<ReaderHelper *> SEServiceHelper::getReaders()
- {
- return readers;
- }
-
- bool SEServiceHelper::isConnected()
- {
- return (readers.size() > 0);
- }
-
- void SEServiceHelper::shutdown()
- {
- }
-
- void SEServiceHelper::shutdownSync()
- {
- }
-
} /* namespace smartcard_service_api */
} /* namespace smartcard_service_api */
namespace smartcard_service_api
{
namespace smartcard_service_api
{
- SessionHelper::SessionHelper(ReaderHelper *reader)
+ SessionHelper::SessionHelper(ReaderHelper *reader) : closed(true)
- closed = true;
-
- if (reader == NULL)
- return;
-
- SessionHelper::~SessionHelper()
- {
- }
-
- ReaderHelper *SessionHelper::getReader()
- {
- return reader;
- }
-
// ByteArray SessionHelper::getATR()
// {
// return atr;
// }
// ByteArray SessionHelper::getATR()
// {
// return atr;
// }
-
- bool SessionHelper::isClosed()
- {
- return closed;
- }
-
} /* namespace smartcard_service_api */
} /* namespace smartcard_service_api */
* limitations under the License.
*/
* limitations under the License.
*/
#ifndef SESERVICEHELPER_H_
#define SESERVICEHELPER_H_
#ifndef SESERVICEHELPER_H_
#define SESERVICEHELPER_H_
class SEServiceHelper : public Synchronous
{
protected:
class SEServiceHelper : public Synchronous
{
protected:
vector<ReaderHelper *> readers;
vector<ReaderHelper *> readers;
+ SEServiceHelper() : connected(false) {}
virtual ~SEServiceHelper();
virtual ~SEServiceHelper();
- vector<ReaderHelper *> getReaders();
- bool isConnected();
- virtual void shutdown();
- virtual void shutdownSync();
+ vector<ReaderHelper *> getReaders() { return readers; }
+ bool isConnected() { return connected; }
+ virtual void shutdown() = 0;
+ virtual void shutdownSync() = 0;
};
} /* namespace smartcard_service_api */
};
} /* namespace smartcard_service_api */
public:
SessionHelper(ReaderHelper *reader);
public:
SessionHelper(ReaderHelper *reader);
- virtual ~SessionHelper();
+ virtual ~SessionHelper() {}
- ReaderHelper *getReader();
- bool isClosed();
+ ReaderHelper *getReader() { return reader; }
+ bool isClosed() { return closed; }
virtual void closeChannels() = 0;
virtual void closeChannels() = 0;
Name: smartcard-service
Summary: Smartcard Service FW
Name: smartcard-service
Summary: Smartcard Service FW
Release: 0
Group: libs
License: Samsung Proprietary License
Release: 0
Group: libs
License: Samsung Proprietary License
#if 0
bool isValidReaderHandle(void *handle);
#endif
#if 0
bool isValidReaderHandle(void *handle);
#endif
+
+ void shutdown() {}
+ void shutdownSync() {}
friend void terminalCallback(char *name, int event, int error, void *user_param);
friend bool dispatcherCallback(void *message, int socket);
friend class ServerDispatcher;
friend void terminalCallback(char *name, int event, int error, void *user_param);
friend bool dispatcherCallback(void *message, int socket);
friend class ServerDispatcher;