Change the rule for releasing resource
authorWonkyu Kwon <wonkyu.kwon@samsung.com>
Tue, 8 Jan 2013 01:57:22 +0000 (10:57 +0900)
committerWonkyu Kwon <wonkyu.kwon@samsung.com>
Thu, 10 Jan 2013 09:22:32 +0000 (18:22 +0900)
 - delete children instance in destroy function.
   so, you never delete returned instance

Change-Id: I5e00e91a87483766a7fda653b8de5d969e719023

client/Reader.cpp
client/SEService.cpp
client/Session.cpp
common/SEServiceHelper.cpp
common/SessionHelper.cpp
common/include/SEServiceHelper.h
common/include/SessionHelper.h
packaging/smartcard-service.spec
server/include/ServerSEService.h

index 01c0c65..12b0b9d 100644 (file)
@@ -70,7 +70,16 @@ namespace smartcard_service_api
 
        Reader::~Reader()
        {
+               size_t i;
+
                closeSessions();
+
+               for (i = 0; i < sessions.size(); i++)
+               {
+                       delete (Session *)sessions[i];
+               }
+
+               sessions.clear();
        }
 
        void Reader::closeSessions()
@@ -80,10 +89,7 @@ namespace smartcard_service_api
                for (i = 0; i < sessions.size(); i++)
                {
                        sessions[i]->closeSync();
-                       delete (Session *)sessions[i];
                }
-
-               sessions.clear();
        }
 
        void Reader::getPackageCert()
index d2a3b78..4af3888 100644 (file)
@@ -75,31 +75,39 @@ namespace smartcard_service_api
 
        SEService::~SEService()
        {
-               shutdownSync();
-       }
-
-       void SEService::shutdown()
-       {
                uint32_t i;
 
+               shutdownSync();
+
                for (i = 0; i < readers.size(); i++)
                {
-                       readers[i]->closeSessions();
                        delete (Reader *)readers[i];
                }
-
                readers.clear();
+       }
 
-               Message msg;
+       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");
+                       }
                }
        }
 
@@ -113,11 +121,8 @@ namespace smartcard_service_api
                        for (i = 0; i < readers.size(); i++)
                        {
                                readers[i]->closeSessions();
-                               delete (Reader *)readers[i];
                        }
 
-                       readers.clear();
-
                        /* send message to load se */
                        int rv;
                        Message msg;
index b22af25..2946ab3 100644 (file)
@@ -54,7 +54,16 @@ namespace smartcard_service_api
 
        Session::~Session()
        {
-               close(NULL, this);
+               size_t i;
+
+               closeSync();
+
+               for (i = 0; i < channels.size(); i++)
+               {
+                       delete (ClientChannel *)channels[i];
+               }
+
+               channels.clear();
        }
 
        void Session::closeChannels()
@@ -64,10 +73,7 @@ namespace smartcard_service_api
                for (i = 0; i < channels.size(); i++)
                {
                        channels[i]->closeSync();
-                       delete (ClientChannel *)channels[i];
                }
-
-               channels.clear();
        }
 
        ByteArray Session::getATRSync()
index 2abb8d2..1f09edc 100644 (file)
 
 namespace smartcard_service_api
 {
-       SEServiceHelper::SEServiceHelper()
-       {
-               connected = false;
-       }
-
        SEServiceHelper::~SEServiceHelper()
        {
                SCARD_BEGIN();
-               shutdown();
                SCARD_END();
        }
 
-       vector<ReaderHelper *> SEServiceHelper::getReaders()
-       {
-               return readers;
-       }
-
-       bool SEServiceHelper::isConnected()
-       {
-               return (readers.size() > 0);
-       }
-
-       void SEServiceHelper::shutdown()
-       {
-       }
-
-       void SEServiceHelper::shutdownSync()
-       {
-       }
-
 } /* namespace smartcard_service_api */
index 08fb34d..c693a3e 100644 (file)
 
 namespace smartcard_service_api
 {
-       SessionHelper::SessionHelper(ReaderHelper *reader)
+       SessionHelper::SessionHelper(ReaderHelper *reader) : closed(true)
        {
-               closed = true;
-
-               if (reader == NULL)
-                       return;
-
                this->reader = reader;
        }
 
-       SessionHelper::~SessionHelper()
-       {
-       }
-
-       ReaderHelper *SessionHelper::getReader()
-       {
-               return reader;
-       }
-
 //     ByteArray SessionHelper::getATR()
 //     {
 //             return atr;
 //     }
-
-       bool SessionHelper::isClosed()
-       {
-               return closed;
-       }
-
 } /* namespace smartcard_service_api */
index 8d884f5..68df8ca 100644 (file)
@@ -14,7 +14,6 @@
 * limitations under the License.
 */
 
-
 #ifndef SESERVICEHELPER_H_
 #define SESERVICEHELPER_H_
 
@@ -34,17 +33,17 @@ namespace smartcard_service_api
        class SEServiceHelper : public Synchronous
        {
        protected:
-               bool connected;
                vector<ReaderHelper *> readers;
+               bool connected;
 
        public:
-               SEServiceHelper();
+               SEServiceHelper() : connected(false) {}
                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 */
index 20ac50c..2320a5d 100644 (file)
@@ -49,10 +49,10 @@ namespace smartcard_service_api
 
        public:
                SessionHelper(ReaderHelper *reader);
-               virtual ~SessionHelper();
+               virtual ~SessionHelper() {}
 
-               ReaderHelper *getReader();
-               bool isClosed();
+               ReaderHelper *getReader() { return reader; }
+               bool isClosed() { return closed; }
 
                virtual void closeChannels() = 0;
 
index 8f95c70..0121235 100644 (file)
@@ -1,6 +1,6 @@
 Name:       smartcard-service
 Summary:    Smartcard Service FW
-Version:    0.1.8
+Version:    0.1.9
 Release:    0
 Group:      libs
 License:    Samsung Proprietary License
index 2df4816..d1d916f 100644 (file)
@@ -55,6 +55,9 @@ namespace smartcard_service_api
 #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;