Fix the svace and coverity issue 99/316199/11 accepted/tizen/unified/20240821.081508 accepted/tizen/unified/dev/20240822.230418 accepted/tizen/unified/x/20240822.014234
authorYoungHun Kim <yh8004.kim@samsung.com>
Thu, 15 Aug 2024 22:28:49 +0000 (07:28 +0900)
committerYoungHun Kim <yh8004.kim@samsung.com>
Tue, 20 Aug 2024 05:20:26 +0000 (14:20 +0900)
 - UNINIT.CTOR.MANY RESOURCE_LEAK etc

Change-Id: I2fa4c580ee38929d98f1af1f2ecd64adad3908c5

41 files changed:
CMakeLists.txt
include_internal/CAsyncQueue.h
include_internal/CDbusHandler.h
include_internal/CHandle.h
include_internal/CHandleManager.h
include_internal/CMessage.h
include_internal/CMessageHandler.h
include_internal/CMessageQueue.h
include_internal/CRequest.h
include_internal/CRequester.h
include_internal/CResourceService.h
include_internal/manager/CConsumer.h
include_internal/manager/CResource.h
include_internal/manager/CResourceCategory.h
include_internal/manager/CResourceDB.h
include_internal/manager/CResourceManager.h
include_internal/manager/CResourceState.h
include_internal/manager/CVirtualResource.h
include_internal/manager/dependence/CAudioCodec.h
include_internal/manager/dependence/CBandwidth.h
include_internal/manager/dependence/CMemCluster.h
include_internal/manager/dependence/CMixingMode.h
packaging/rscmgr-service.spec
src/CCallback.cpp
src/CDbusHandler.cpp
src/CMessage.cpp
src/CMessageHandler.cpp
src/CRequest.cpp
src/CResourceService.cpp
src/manager/CDebugUtils.cpp
src/manager/CResource.cpp
src/manager/CResourceCategory.cpp
src/manager/CResourceDB.cpp
src/manager/CResourceManager.cpp
src/manager/CResourceState.cpp [deleted file]
src/manager/CVirtualResource.cpp
src/manager/dependence/CDependencyController.cpp
src/manager/dependence/CMemCluster.cpp
src/manager/strategy/CNormalModeStrategy.cpp
src/manager/strategy/CPreferenceModeStrategy.cpp
src/rms_service.cpp

index 8162b6a2eab9ee560be25a521879beacfc02c85e..1e67fc743a74101a41a304e063462b8188eb9ed6 100644 (file)
@@ -39,7 +39,6 @@ SET(RSCMGR_SRCS
        src/manager/CResource.cpp
        src/manager/CResourceCategory.cpp
        src/manager/CResourceDB.cpp
-       src/manager/CResourceState.cpp
        src/manager/CResourceManager.cpp
        src/manager/CVirtualResource.cpp
        src/manager/CConsumerContainer.cpp
index f5a7f131bc57474bd8201ee458602cd9581e256f..2b3df53e722078ef78fc208bdc46e30e8884b763 100644 (file)
@@ -38,7 +38,7 @@ public:
        int length(void);
 
 private:
-       GAsyncQueue *queue;
+       GAsyncQueue *queue {};
 };
 
 #endif // __C_ASYNC_QUEUE_H__
index 504563f425f0ee0fd1593144729836f7218fa77f..64310c1a2863963e40542d2ad8f907e26f451e15 100644 (file)
@@ -37,11 +37,11 @@ private:
        static const std::string m_methods;
        static const GDBusInterfaceVTable m_vtable;
 
-       GDBusConnection *m_conn;
-       unsigned int m_reg_id;
-       unsigned int m_own_id;
+       GDBusConnection *m_conn {};
+       unsigned int m_reg_id {};
+       unsigned int m_own_id {};
 
-       CAsyncQueue *m_async_queue;
+       CAsyncQueue *m_async_queue {};
 
        bool MakeDbusConnection(void);
        void RegisterObjects(void);
index 2dfb6d4a7bc130d96ffd559aeee3634895680c81..95a8e650f31cd117e47e569dc3d3e5be75cc3a26 100644 (file)
 class CHandle
 {
 public:
-       CHandle() {}
+       CHandle() : handle(0), is_used(0), pid(0), main_priority(0), sub_priority(0), app_pid(0), app_id(nullptr) {}
        CHandle(int handle, int is_used, int pid);
        ~CHandle() {}
 
-       int handle;
-       int is_used;
-       int pid;
-       int main_priority;
-       int sub_priority;
-       int app_pid;
-       char *app_id;
+       int handle {};
+       int is_used {};
+       int pid {};
+       int main_priority {};
+       int sub_priority {};
+       int app_pid {};
+       char *app_id {};
        char process_name[RMS_NAME_BUF_SIZE];
 };
 
index 9c27e92b9322cc3d0981ef52ddebfb56090d3b94..7e2f614eb4f9c999881eb215c059ab757cf476e2 100644 (file)
@@ -44,8 +44,8 @@ private:
        void m_PrintHandleList(void);
        CHandle *findHandle(int id);
 
-       CResourceManager *m_rsc_mgr;
-       int m_next_handle;
+       CResourceManager *m_rsc_mgr {};
+       int m_next_handle {};
        std::map<int, CHandle*> m_handles;
 };
 
index f7280d3b0e9d3d5c46b20271db3df2d5c94fd4fb..1f0d962c4ae23ab7e0f0dfc210038a4b8953cce0 100644 (file)
@@ -46,9 +46,9 @@ public:
        void PrintInfo(void);
 
 private:
-       rms_msg_request *m_msgq_req;
-       GDBusMethodInvocation *m_invoc;
-       msg_sender_e m_sender;
+       rms_msg_request *m_msgq_req {};
+       GDBusMethodInvocation *m_invoc {};
+       msg_sender_e m_sender { MSG_SENDER_MSGQ };
        std::string m_name;
 
        void PrintDbus(void);
index f8c3c0d84042b46ed9dfa203ad7b87aa96ab6a37..62d18b5cde0ad18997c58d958398a37bc86192ea 100644 (file)
@@ -105,15 +105,15 @@ private:
 
        unsigned long m_req_timeout = 5;
 
-       CMessageQueue *msgq_rx;
-       CMessageQueue *msgq_tx;
-       CAsyncQueue *async_queue;
-       CAsyncQueue *async_pending_queue;
-       CLockController *m_lock_ctr;
-       CResourceManager *m_rsc_mgr;
-       CHandleManager *m_handle_mgr;
-       CQueryHandler *m_query_h;
-       CDbusHandler *m_dbus_h;
+       CMessageQueue *msgq_rx {};
+       CMessageQueue *msgq_tx {};
+       CAsyncQueue *async_queue {};
+       CAsyncQueue *async_pending_queue {};
+       CLockController *m_lock_ctr {};
+       CResourceManager *m_rsc_mgr {};
+       CHandleManager *m_handle_mgr {};
+       CQueryHandler *m_query_h {};
+       CDbusHandler *m_dbus_h {};
 
        typedef void (CMessageHandler::*msg_handler)(rms_msg_request *request, rms_msg_response *response);
        static msg_handler handlers[RMS_REQUEST_MAX];
index bf84783a46644938952512eeef488a62cdfa4242..c831cc702751106e1cea5b59ed178df0828e7c61 100644 (file)
@@ -38,8 +38,8 @@ private:
        int recover(void);
        static int getKey(msgq_type_e type);
 
-       msgq_type_e msgq_type;
-       int msgq_id;
+       msgq_type_e msgq_type { MSG_QUEUE_RX };
+       int msgq_id {};
 
        static const long msgq_size = 131072; // 128KB
        static const int key_rx = 8211;
index fa52674a97045fb2eab56fd4d3d3bc51c0725900..55cb1969ace64e50d8a5cbf32f328bb0e4488653 100644 (file)
@@ -23,8 +23,8 @@ class CRequester;
 class CRequest
 {
 public:
-       CRequest(CRequester *requester);
-       ~CRequest();
+       CRequest(CRequester *requester) : m_requester(requester) {}
+       ~CRequest() {}
 
        CRequester *getRequester(void);
 
@@ -74,21 +74,21 @@ private:
        int UnmaskMVZoneInfo(int category_option);
        int UnmaskForceOptions(int category_option);
 
-       CRequester *m_requester;
+       CRequester *m_requester {};
 
-       int m_category_id;
-       int m_category_option;
-       rms_rsc_category_e m_category;
-       rms_requests_resource_state_e m_state;
-       rms_mixing_mode_e m_mixing_mode;
-       int m_device_id;
+       int m_category_id {};
+       int m_category_option {};
+       rms_rsc_category_e m_category { RMS_CATEGORY_NONE };
+       rms_requests_resource_state_e m_state { RMS_STATE_PASSIVE };
+       rms_mixing_mode_e m_mixing_mode { RMS_MIXING_MODE_DEFAULT };
+       int m_device_id {};
 
-       rms_return_code_e m_result;
-       int m_candidate_device;
-       int m_allocated_device;
-       int m_virtual_device;
-       int m_mv_zone_id;
-       rms_error_type_e m_reason;
+       rms_return_code_e m_result { RMS_OK };
+       int m_candidate_device {};
+       int m_allocated_device {};
+       int m_virtual_device {};
+       int m_mv_zone_id {};
+       rms_error_type_e m_reason { RMS_ERR_TYPE_NONE };
 };
 
 #endif //__CREQUEST_H__
index 0cd015a4c812638e2f50580fd1661003f2efee03..f179d286c0e5a6a31aa0f4960e4ea6e0ebb864af 100644 (file)
@@ -37,10 +37,10 @@ public:
        std::string GetCmdName(void) { return m_cmd_name; }
 
 private:
-       int m_handle;
-       int m_pid;
-       int m_main_priority;
-       int m_sub_priority;
+       int m_handle {};
+       int m_pid {};
+       int m_main_priority {};
+       int m_sub_priority {};
        std::string m_app_id;
        std::string m_cmd_name;
 };
index e8e4e5df39cf969381b2ef154416d697e8c0cf06..5bdafc11243a40c91ffcf05b01799ea0774b91c4 100644 (file)
 class CResourceService
 {
 public:
-       CResourceService(void) {}
+       CResourceService(void) : m_msg_h(nullptr) {}
        ~CResourceService(void) {}
        int Init(GMainLoop *main_loop);
 
 private:
 
-       CMessageHandler *m_msg_h;
+       CMessageHandler *m_msg_h {};
 
        int IsFirstLaunch(void);
        void RequestColdPowerOff(void);
@@ -37,6 +37,7 @@ private:
        void SetVIPProcess(void);
        static gboolean WatchDogCallback(gpointer data);
        static gboolean InvalidResourceTableMsgCallback(gpointer data);
+       static void create_ready_file();
 };
 
 #endif //__RMS_CRESOURCE_SERVICE_H__
index 2292aaa652b167774fcd5560d4b1eb8b6427604f..5b373f16c8d3e58d7c0afa184e9b632900f0aa10 100644 (file)
@@ -56,9 +56,9 @@ private:
 
        std::set<int> m_resources;
 
-       int m_consumerID;
-       rms_priority_s m_priority;
-       long m_pid;
+       int m_consumerID {};
+       rms_priority_s m_priority {};
+       long m_pid {};
        std::string m_app_id;
        std::string m_cmd_name;
 };
index 63a3bcc83c8f5d0cd7227bdd7cbdce13b457ac82..dba9b23ecf87964ccc821aaec57b28d2e90b8cb3 100644 (file)
@@ -107,35 +107,35 @@ private:
        std::set<int> m_shared_consumers;
        std::set<int> m_consumer_ids;
 
-       int m_id;
-       int m_vrsc_id;
-       int m_virtual_id;
-       int m_dedicated_virtual_id;
-       rms_resource_internal_state_e m_state;
-       rms_rsc_category_e m_category_type;
-       const char *m_device_name;
-       const char *m_device_path;
-       int m_category_class;
-       int m_cur_category;
-
-       unsigned int m_occupied_bw;
-       unsigned int m_default_bw;
-       int m_is_main_device;
-       int m_sharable_count;
-
-       bool m_is_reserved;
-       bool m_is_scaler;
-       int m_reserved_consumer_id;
-       unsigned long m_allocated_time;
-
-       int m_shared_count;
-       int m_reserved_count;
-       int m_mv_zone_id;
+       int m_id {};
+       int m_vrsc_id {};
+       int m_virtual_id {};
+       int m_dedicated_virtual_id {};
+       rms_resource_internal_state_e m_state { RMS_INTERNAL_STATE_FREE };
+       rms_rsc_category_e m_category_type { RMS_CATEGORY_NONE };
+       const char *m_device_name {};
+       const char *m_device_path {};
+       int m_category_class {};
+       int m_cur_category {};
+
+       unsigned int m_occupied_bw {};
+       unsigned int m_default_bw {};
+       int m_is_main_device {};
+       int m_sharable_count {};
+
+       bool m_is_reserved {};
+       bool m_is_scaler {};
+       int m_reserved_consumer_id {};
+       unsigned long m_allocated_time {};
+
+       int m_shared_count {};
+       int m_reserved_count {};
+       int m_mv_zone_id {};
 
        std::string m_audio_codec;
        std::vector<CResourceObserver*> m_observers;
        std::set<unsigned int> m_mem_clusters;
-       rms_mixing_mode_e m_mixing_mode;
+       rms_mixing_mode_e m_mixing_mode { RMS_MIXING_MODE_DEFAULT };
 };
 
 #endif // __RSC_MGR_SERVER_RESOURCE_H__
index acf20dfc742e2bc13f6c41bfeb36bb25bb4a544c..53673ea1ab3406a6ff710ae4232264358ad3c0ca 100644 (file)
@@ -32,7 +32,7 @@ class CResourceCategory
 {
 public:
        CResourceCategory(rms_rsc_category_e resource_category_id, int category_class);
-       virtual ~CResourceCategory() {}
+       virtual ~CResourceCategory();
 
        rms_rsc_category_e GetCategoryID(void) { return m_categoryID; }
        void AddVirtualResource(IN int device_id, IN CVirtualResource *vresource);
@@ -46,8 +46,8 @@ public:
 private:
        std::map<int, CVirtualResource *> m_device_id_to_vresource_map;
 
-       rms_rsc_category_e m_categoryID;
-       CAllocateStrategy *m_alloc_strategy;
+       rms_rsc_category_e m_categoryID { RMS_CATEGORY_NONE };
+       CAllocateStrategy *m_alloc_strategy {};
 
        void MakeResourceMapSortedByAllocTime(std::multimap<unsigned long, CVirtualResource *> *time_resource_map);
 };
index f10ac54808bc6c25e8ec9e26742ebaf7aca16201..44be83c9121edc39c9e0c71ab8d04fdbf785d6ab 100644 (file)
@@ -109,8 +109,8 @@ private:
        std::map<int, CResource*> m_rscs_has_zone_id;
 
        static CResourceDB *m_instance;
-       unsigned int m_device_id; //for virtual resource
-       int m_max_vdecs;
+       unsigned int m_device_id {}; //for virtual resource
+       int m_max_vdecs {};
 
        std::set<int> m_reclaim_rscs; // resources reclaiming
        std::map<int, int> m_active_vdecs; // device id, consumer id
index 29594f409be6ea49e31db22d4041ef6025fa3905..b1ef76dca37720b45221332a718df20358fe1cc0 100644 (file)
@@ -66,11 +66,11 @@ private:
        void MakeConsumerInfoToBeReturned(consumer_reclaim_s *return_consumer, std::map<int, std::set<int> > *consumer_id_to_resource_set_map);
        void PrintConsumerInfoToBeReturned(consumer_reclaim_s *consumer_info);
 
-       CResourceDB *m_db;
+       CResourceDB *m_db {};
 
-       int m_is_db_created;
-       rms_error_type_e m_error_type;
-       CConsumerContainer *m_consumers;
+       int m_is_db_created {};
+       rms_error_type_e m_error_type {};
+       CConsumerContainer *m_consumers {};
 
 };
 
index 911346fdcda484f9c8fa2daa011a10c81800b3b8..5e17df04caa5861932cfcb52273bd1e46bb13ae1 100644 (file)
@@ -20,7 +20,8 @@
 class CResourceState
 {
 public:
-       CResourceState(int device_id, int category_type, int consumer_id, int state, std::string app_id);
+       CResourceState(int device_id, int category_type, int consumer_id, int state, std::string app_id)
+               : m_device_id(device_id), m_consumer_id(consumer_id), m_state(state), m_category_type(category_type), m_app_id(app_id) {}
        ~CResourceState() = default;
 
        int GetDeviceId(void) { return m_device_id; }
@@ -30,10 +31,10 @@ public:
        std::string GetAppId(void) { return m_app_id; }
 
 private:
-       int m_device_id;
-       int m_consumer_id;
-       int m_state;
-       int m_category_type;
+       int m_device_id {};
+       int m_consumer_id {};
+       int m_state {};
+       int m_category_type {};
        std::string m_app_id;
 };
 
index eed50b8eec8f6081a29d3e9fa1525a292057ecff..e9bdad5f24a7d8fadecafd7c2cbc9222e0ad6184 100644 (file)
@@ -42,16 +42,16 @@ public:
        bool IsMainDevice(void) { return m_is_main_device; }
        bool IsAIDevice(void) { return m_is_ai_device; }
 private:
-       int m_vir_rsc_id;
-       rms_rsc_category_e m_category_type;
-       unsigned int m_vir_rsc_bw;
-       bool m_is_main_device;
-       bool m_is_ai_device;
-       int m_category_class;
+       int m_vir_rsc_id {};
+       rms_rsc_category_e m_category_type { RMS_CATEGORY_NONE };
+       unsigned int m_vir_rsc_bw {};
+       bool m_is_main_device {};
+       bool m_is_ai_device {};
+       int m_category_class {};
        std::set<unsigned int> m_mem_clusters;
        std::string m_audio_codec;
 
-       CResource *m_rsc;
+       CResource *m_rsc {};
 };
 
 #endif // _RM_VIRTUAL_RESOURCE_H_INCLUDED
index 1dcb59a9e09c7aa1965f56921abe1b95701b58ab..76e8a5c791da6ee70eec931fe41d1729b53bfa5d 100644 (file)
@@ -41,10 +41,10 @@ public:
 private:\r
        bool isUnknownCodec(void) { return (m_name.length() == 0); }\r
        std::string m_name;\r
-       unsigned int m_ref_count;\r
-       unsigned int m_ref_count_max;\r
+       unsigned int m_ref_count {};\r
+       unsigned int m_ref_count_max {};\r
        std::map<int, int> m_consumers; // consumer id, ref_count\r
        std::map<int, int> m_resources; // device_id, consumer id\r
 };\r
 \r
-#endif //__CAUDIO_CODEC_H__
\ No newline at end of file
+#endif //__CAUDIO_CODEC_H__\r
index 68bdfdc10286ab840f9f14a7f91b1c0ae31f89fa..68a4a934ba1e373a2b721b72a28e2da075319df2 100644 (file)
@@ -46,8 +46,8 @@ private:
 \r
        std::map<int, int> m_consumers; // device_id, consumer_id\r
        std::map<int, std::map<int, int>> m_ndec_consumers; // category id, <device_id, consumer_id>\r
-       unsigned int m_max;\r
-       unsigned int m_avail;\r
+       unsigned int m_max {};\r
+       unsigned int m_avail {};\r
 };\r
 \r
 #endif //__CBANDWIDTH_H__\r
index e49b77ab3124fc5d22b546588d46cc97246ec8c1..84769baca606c977b1d1c19d55ea2ffb9d2dccb1 100644 (file)
@@ -40,10 +40,10 @@ public:
        void ClearConsumers(void);\r
        std::set<int> GetConsumers(void);\r
 private:\r
-       unsigned int m_id;\r
+       unsigned int m_id {};\r
        std::map<int, std::set<int>> m_consumers; // consumer, device ids\r
-       int m_category_class;\r
-       int m_category_id;\r
+       int m_category_class {};\r
+       int m_category_id {};\r
 };\r
 \r
 #endif //__CMEM_CLUSTER_H__\r
index 002ca7e3ebf23929c5c0434bf05cb30d3700e5ee..55734b48b203ce1c3bef33df5b79befd1d5e936c 100644 (file)
@@ -32,7 +32,7 @@ public:
        rms_mixing_mode_e getMode(void) { return m_mode; }\r
        std::map<int, int> GetConsumers(void) { return m_consumers; }\r
 private:\r
-       rms_mixing_mode_e m_mode;\r
+       rms_mixing_mode_e m_mode { RMS_MIXING_MODE_DEFAULT };\r
        std::map<std::string, CAudioCodec*> m_audio_codecs;\r
        std::map<int, int> m_consumers; // device id, consumer id\r
 };\r
index 9fa7ee86f5c0d6d23232a370db4e456a2e5ef58c..600083d2a5a7d85c0b64d913918b816e283286e0 100644 (file)
@@ -1,7 +1,7 @@
 Name: rscmgr-service
 Summary: Daemon for resource manager
 Version: 0.1
-Release: 4
+Release: 5
 Group:   Multimedia/Libraries
 License: Apache-2.0
 Source0: %{name}-%{version}.tar.gz
index 3422b6897db060547a2b3996d4c0479275814a30..1207408af412f6b02d03597a2205317012cb6d30 100644 (file)
@@ -48,7 +48,8 @@ void CCallback::InitCallback(void)
                return;
        }
 
-       chmod(cb_path, dir_mode);
+       if (chmod(cb_path, dir_mode) == -1)
+               SERVER_ERR("chmod is failed errno(%d)", errno);
 }
 
 int CCallback::SendCallbackMessage(int cid, int pid, void *callback_data, int size, int *err)
@@ -61,7 +62,7 @@ int CCallback::SendCallbackMessage(int cid, int pid, void *callback_data, int si
        snprintf(callback_path, 256, "/run/rsc_mgr/%d.%d.s2c.cb", pid, cid);
 
        if ((fd = open(callback_path, O_WRONLY|O_NONBLOCK)) < 0) {
-               SERVER_ERR("open error (%s), errno(%d)\n", callback_path, errno);
+               SERVER_ERR("open error (%s), errno(%d)", callback_path, errno);
                *err = errno;
                return RMS_ERROR;
        }
@@ -76,7 +77,7 @@ int CCallback::SendCallbackMessage(int cid, int pid, void *callback_data, int si
        ret = write(fd, callback_data, size);
 
        if (ret <= 0) {
-               SERVER_ERR("failed to write callback.(%s) ret(%d), errno(%d)\n", callback_path, ret, errno);
+               SERVER_ERR("failed to write callback.(%s) ret(%d), errno(%d)", callback_path, ret, errno);
                *err = errno;
                close(fd);
                return RMS_ERROR;
index 7f213b2df6e728c256ad470f4d266d6e21332094..7fd9d9cc0ef12f9cb140380e5dc9f58d668c7a5f 100644 (file)
@@ -86,7 +86,7 @@ const std::string CDbusHandler::m_methods =
                "</interface>"
        "</node>";
 
-CDbusHandler::CDbusHandler(CAsyncQueue *queue)
+CDbusHandler::CDbusHandler(CAsyncQueue *queue) : m_own_id()
 {
        assert(queue);
        m_async_queue = queue;
index 00fda5a43717595f5455a0c978fb67298412d56a..3c29baddef802425d907bfd344494fb9adf9a21a 100644 (file)
@@ -28,7 +28,7 @@ CMessage::CMessage(std::string name)
        m_name = name;
 }
 
-CMessage::CMessage(rms_msg_request *req)
+CMessage::CMessage(rms_msg_request *req) : m_invoc()
 {
        assert(req);
 
index 08f12767186939660dc60ee0f96017fdc9856ca4..430199a4c8aa06884c6021d8b220b5ba9ffe8dfd 100644 (file)
@@ -69,7 +69,18 @@ CMessageHandler::CMessageHandler(CResourceManager *rsc_mgr)
 
 CMessageHandler::~CMessageHandler(void)
 {
-
+       if (m_handle_mgr)
+               delete m_handle_mgr;
+       if (m_query_h)
+               delete m_query_h;
+       if (async_pending_queue)
+               delete async_pending_queue;
+       if (async_queue)
+               delete async_queue;
+       if (msgq_tx)
+               delete msgq_tx;
+       if (msgq_rx)
+               delete msgq_rx;
 }
 
 void CMessageHandler::InitDbusHandlers(void)
@@ -124,19 +135,35 @@ void CMessageHandler::m_ConstructRequestedDevice(rms_msg_request *request, rms_r
 
 int CMessageHandler::Run(void)
 {
-       if (g_thread_new("rms_msgq_thread", msgQThread, this) == NULL) {
+       GThread *_msgQThread = g_thread_new("rms_msgq_thread", msgQThread, this);
+       if (!_msgQThread) {
                SERVER_ERR("failed to create rms_msgq thread");
                assert(0);
                return RMS_ERROR;
        }
 
-       if (g_thread_new("rms_msg_thread", msgThread, this) == NULL) {
-               SERVER_ERR("event loop thread create failed\n");
+       GThread *_msgThread = g_thread_new("rms_msg_thread", msgThread, this);
+       if (!_msgThread) {
+               SERVER_ERR("event loop thread create failed");
                assert(0);
                return RMS_ERROR;
        }
 
        m_dbus_h = new CDbusHandler(async_queue);
+
+       // g_thread_join to release resources
+       gpointer _msgQResult = g_thread_join(_msgQThread);
+       if (_msgQResult)
+               g_free(_msgQResult);
+
+       gpointer _msgResult = g_thread_join(_msgThread);
+       if (_msgResult)
+               g_free(_msgResult);
+
+       delete m_dbus_h;
+
+       SERVER_INFO("RMS_OK");
+
        return RMS_OK;
 }
 
@@ -721,7 +748,7 @@ bool CMessageHandler::IsAllResourcesReclaimed(rms_consumer_tobe_returned_s *cons
 void CMessageHandler::ProcessMessage(CAsyncQueue *queue, CMessage *msg, int cid_requester, int cid_releaser)
 {
        rms_msg_request *req = msg->GetRequest();
-       rms_msg_response resp;
+       rms_msg_response resp {};
        int handle;
        char cmd[RMS_NAME_BUF_SIZE] = {0,};
 
@@ -896,6 +923,11 @@ void CMessageHandler::NotifyConflict(consumer_reclaim_s *conflict_info, int zone
                consumer_id = conflict_info->consumer_info[i].consumer_id;
                consumer = CConsumerContainer::getInstance()->findConsumer(consumer_id);
 
+               if (!consumer) {
+                       SERVER_WARN("Consumer %d not found", consumer_id);
+                       continue;
+               }
+
                for (int j = 0; j < conflict_info->consumer_info[i].n_conflicted; j++) {
                        device_id = conflict_info->consumer_info[i].conflicted_resources[j].device_id;
                        app_zone_id = m_rsc_mgr->GetZoneId(device_id);
@@ -911,7 +943,7 @@ void CMessageHandler::NotifyConflict(consumer_reclaim_s *conflict_info, int zone
                                                                        (consumer->GetAppID().empty()) ? consumer->GetCmdName().c_str() : consumer->GetAppID().c_str(), app_zone_id, zone_id),
                                                                &error)) {
                                SERVER_ERR("failed to send resource conflict (%d:%d:%d:%s)-%s", category_id, device_id, consumer_id,
-                                       (consumer->GetAppID().empty()) ? consumer->GetCmdName().c_str():consumer->GetAppID().c_str(), (error) ? error->message : "unknown");
+                                       (consumer->GetAppID().empty()) ? consumer->GetCmdName().c_str() : consumer->GetAppID().c_str(), (error) ? error->message : "unknown");
                        }
                }
        }
index bf4500cbdb87fbd858767de8984f11e0cc15e622..6eb4985829914bf2bbe4e9edf02f8ce238d82878 100644 (file)
 #include "CRequester.h"
 #include "CRequest.h"
 
-CRequest::CRequest(CRequester *requester)
-:m_requester(requester)
-{
-       m_device_id = 0;
-       m_category_id = 0;
-       m_category_option = 0;
-       m_category = RMS_CATEGORY_NONE;
-       m_result = RMS_ERROR;
-       m_candidate_device = RMS_DEVICE_NONE;
-       m_allocated_device = RMS_DEVICE_NONE;
-       m_virtual_device = RMS_DEVICE_NONE;
-}
-
-CRequest::~CRequest()
-{
-}
-
 CRequester *CRequest::getRequester(void)
 {
        return m_requester;
@@ -265,7 +248,7 @@ rms_rsc_category_e CRequest::ToScalerCategory(int category, int category_option,
                return RMS_CATEGORY_SCALER;
 
        if (category > RMS_CATEGORY_SCALER_OPTION && category < RMS_CATEGORY_SCALER_OPTION_MAX)
-               return (rms_rsc_category_e) category_option;
+               return (rms_rsc_category_e) category;
 
        if (category_option > RMS_CATEGORY_SCALER_OPTION && category_option < RMS_CATEGORY_SCALER_OPTION_MAX)
                return (rms_rsc_category_e) category_option;
@@ -412,13 +395,10 @@ rms_mixing_mode_e CRequest::ToMixingMode(int category, int category_option)
 {
        if (category != RMS_CATEGORY_AUDIO_DECODER && category != RMS_CATEGORY_AUDIO_DECODER_SUB)
                return RMS_MIXING_MODE_DEFAULT;
-
-       if (category_option & RMS_MIXING_OPT_MULTIVIEW)
-               return RMS_MIXING_MODE_MULTIVIEW;
-
-       if (category_option & RMS_MIXING_OPT_INTERACTION_SOUND)
+       else if (category_option & RMS_MIXING_OPT_INTERACTION_SOUND)
                return RMS_MIXING_MODE_INTERACTION_SOUND;
 
+       SERVER_INFO("RMS_MIXING_MODE_DEFAULT");
        return RMS_MIXING_MODE_DEFAULT;
 }
 
index 124281b45e391bc4849192ca237651360ee09c3e..6f3631765b999fd491b2e0c824f12246a3c3e2d5 100644 (file)
@@ -40,16 +40,21 @@ int CResourceService::Init(GMainLoop *main_loop)
        if (rsc_mgr->RegisterResources() != RMS_OK) {
                SERVER_ERR("RegisterResources is failed");
                g_timeout_add(RM_SERVER_INVALID_TABLE_TIME_30000_MSEC, InvalidResourceTableMsgCallback, NULL);
+               delete rsc_mgr;
                return RMS_ERROR;
        }
 
        m_msg_h = new CMessageHandler(rsc_mgr);
        if (m_msg_h->Run() != RMS_OK) {
                SERVER_ERR("RUN failed");
+               delete m_msg_h;
+               m_msg_h = nullptr;
+               delete rsc_mgr;
                return RMS_ERROR;
        }
 
        SERVER_INFO("Done");
+
        return RMS_OK;
 }
 
index 5e248064f3387fd9015d6d92682adac50193aa53..9d5d0a85488c6900a3243e77f7d67d67087cba50 100644 (file)
@@ -347,17 +347,24 @@ int rms_get_cmd_name(pid_t pid, char *name_out, int size)
        size_t sz;\r
 \r
        snprintf(name, sizeof(name), "/proc/%d/cmdline", pid);\r
+       // Check if the process exists and is accessible\r
+       if (access(name, R_OK) != 0) {\r
+               SERVER_ERR("failed to access (%s) : %d", name, errno);\r
+               return RMS_ERROR;\r
+       }\r
+\r
        f = fopen(name, "r");\r
        if (!f) {\r
                SERVER_ERR("failed to open cmdline(%s) : %d", name, errno);\r
                return RMS_ERROR;\r
-       } else {\r
-               sz = fread(name, sizeof(char), sizeof(name)-1, f);\r
-               name[sz] = '\0';\r
-               fclose(f);\r
        }\r
 \r
+       sz = fread(name, sizeof(char), sizeof(name)-1, f);\r
+       name[sz] = '\0';\r
+       fclose(f);\r
+\r
        snprintf(name_out, size, "%s", name);\r
+\r
        return RMS_OK;\r
 }\r
 \r
@@ -382,7 +389,7 @@ void rms_print_log_console(char *buf)
        }\r
 \r
        ret = clock_gettime(CLOCK_MONOTONIC, &tnow);\r
-       snprintf(output, RMS_CONSOLE_BUF_SIZE, "[RMS][%ld.%6ld] %s\n", tnow.tv_sec, tnow.tv_nsec/1000, buf);\r
+       snprintf(output, RMS_CONSOLE_BUF_SIZE, "[RMS][%ld.%6ld] %s", tnow.tv_sec, tnow.tv_nsec/1000, buf);\r
        ret = write(fd, output, strlen(output));\r
 \r
        if (ret < 0) {\r
@@ -416,7 +423,7 @@ int rm_is_valid_pid(int pid)
                return 1;\r
        }\r
 \r
-       SERVER_ERR("pid(%d)/errno(%d)", pid, errno);\r
+       SERVER_ERR("pid(%d) / errno(%d)", pid, errno);\r
 \r
        return (errno == ESRCH) ? 0 : 1;\r
 }\r
@@ -657,7 +664,7 @@ void rms_display_resource_table_error_popup(void)
        g_string_append_printf(gstr, "%sProduct type : %d%s", indent, rm_get_product_type(), " <br>");\r
 \r
        if (system_info_get_custom_string("com.samsung/featureconf/product.chipset", &chipset_info)!= SYSTEM_INFO_ERROR_NONE) {\r
-               SERVER_ERR("Failed to get chipset from system-info\n");\r
+               SERVER_ERR("Failed to get chipset from system-info");\r
                goto end;\r
        }\r
 \r
index 11505edb74b199903e90b0342444b21eb3abd6e1..1b7fb6111f9e3b86786d9a1863fa187937be01e6 100644 (file)
@@ -58,18 +58,10 @@ void CResource::m_SetSubScalerFlag(int next_state)
 }\r
 \r
 CResource::CResource(const int device_id, const rms_rsc_category_e category_type, const char *name, const char *path,\r
-                                                std::set<unsigned int> mem_cluster, int is_main_device, const char *audio_codec, int sharable_count)\r
+                       std::set<unsigned int> mem_cluster, int is_main_device, const char *audio_codec, int sharable_count)\r
 :m_id(device_id), m_device_name(name), m_device_path(path), m_is_main_device(is_main_device), m_sharable_count(sharable_count)\r
 {\r
-       m_state = RMS_INTERNAL_STATE_FREE;\r
-       m_occupied_bw = 0;\r
-       m_default_bw = 0;\r
-       m_is_reserved = false;\r
-       m_reserved_consumer_id = 0;\r
-       m_mixing_mode = RMS_MIXING_MODE_DEFAULT;\r
        m_mem_clusters = mem_cluster;\r
-       m_virtual_id = 0;\r
-       m_mv_zone_id = -1;\r
 \r
        if (audio_codec)\r
                m_audio_codec.assign(audio_codec);\r
index 0633a61581d806325c9c0ec75fc4b9eb3ee5fe36..4cae0b16c703852187f573ed0a202a894d04067e 100644 (file)
@@ -35,6 +35,11 @@ CResourceCategory::CResourceCategory(IN rms_rsc_category_e resource_category_id,
        assert(m_alloc_strategy);\r
 }\r
 \r
+CResourceCategory::~CResourceCategory()\r
+{\r
+       delete m_alloc_strategy;\r
+}\r
+\r
 void CResourceCategory::AddVirtualResource(IN int device_id, IN CVirtualResource *vresource)\r
 {\r
        std::map<int, CVirtualResource *>::iterator it = m_device_id_to_vresource_map.find(device_id);\r
index 12751ec58109f09f7ee7451d80a8f649d98f9c2d..ce93b025067df237a5eb30b459c1538b7cf2172b 100644 (file)
@@ -507,6 +507,12 @@ void CResourceDB::NotifyResourceStateUpdatedAsync(CResource *resource, int consu
 {\r
        int device_id = resource->GetDeviceID();\r
        CConsumer *consumer = CConsumerContainer::getInstance()->findConsumer(consumer_id);\r
+\r
+       if (!consumer) {\r
+               SERVER_WARN("Consumer %d is not found", consumer_id);\r
+               return;\r
+       }\r
+\r
        std::string app_id = consumer->GetAppID();\r
 \r
        if (app_id.empty())\r
@@ -536,10 +542,14 @@ CResource *CResourceDB::FindMainResource(rms_rsc_category_e category_id)
 \r
 void CResourceDB::FindMainResources(IN std::map<int, CResource*> *resource_map)\r
 {\r
-       rms_rsc_category_e categories[5] = {RMS_CATEGORY_VIDEO_DECODER, RMS_CATEGORY_VIDEO_DECODER_UHD, RMS_CATEGORY_SCALER, RMS_CATEGORY_AUDIO_DECODER, RMS_CATEGORY_AUDIO_MAIN_OUT};\r
+       rms_rsc_category_e categories[5] = {RMS_CATEGORY_VIDEO_DECODER,\r
+                                                               RMS_CATEGORY_VIDEO_DECODER_UHD,\r
+                                                               RMS_CATEGORY_SCALER,\r
+                                                               RMS_CATEGORY_AUDIO_DECODER,\r
+                                                               RMS_CATEGORY_AUDIO_MAIN_OUT};\r
        CResource *resource = NULL;\r
 \r
-       for (int i = 0; i < 6; i++) {\r
+       for (int i = 0; i < 5; i++) {\r
                resource = FindMainResource(categories[i]);\r
                if (!resource) {\r
                        SERVER_INFO("no main resource for (%d)", categories[i]);\r
@@ -728,7 +738,7 @@ void CResourceDB::SwapResource(std::set<int> consumers, int cur_device_id, int n
                        continue;\r
                }\r
 \r
-               SERVER_INFO("swap resource (%d):(%d>%d)", it, cur_device_id, new_device_id);\r
+               SERVER_INFO("swap resource (%d) :(%d>%d)", it, cur_device_id, new_device_id);\r
 \r
                if (consumer->IsUsingResource(new_device_id)) {\r
                        SERVER_INFO("no need to swap (%d:%d)", it, new_device_id);\r
index 166b724dc87d7c460ec036ea9e7f32f26d1d1c22..fbb93417e78df895cd023040484fdc7bd5797e80 100644 (file)
@@ -275,7 +275,7 @@ int CResourceManager::ReleaseResources(IN const int consumer_id, IN const rms_re
                rsc->RemoveConsumer(consumer_id, false);
                rsc->ResetBW();
                SERVER_INFO("result (0) - con(%d:%s) / devId(%d) / rId(%d)",
-                       consumer_id, consumer->GetAppID().empty() ? consumer->GetCmdName().c_str():consumer->GetAppID().c_str(), req->devices[i].device_id, device_id);
+                       consumer_id, consumer->GetAppID().empty() ? consumer->GetCmdName().c_str() :consumer->GetAppID().c_str(), req->devices[i].device_id, device_id);
        }
 
        SERVER_WARN("Request for Deallocation - cid[%d] / requested #[%d] / REMAINING[%d] : SUCCESS", consumer_id, req->resources_num, consumer->GetResourceNum());
@@ -643,7 +643,7 @@ int CResourceManager::GetScalerState(int category_id, GVariantBuilder *builder)
 
                consumer = CConsumerContainer::getInstance()->findConsumer(cid);
                if (consumer)
-                       app_id = (consumer->GetAppID().empty()) ? consumer->GetCmdName():consumer->GetAppID();
+                       app_id = (consumer->GetAppID().empty()) ? consumer->GetCmdName() : consumer->GetAppID();
 
                SERVER_INFO("(%d:%d:%d:%d:%d:%d:%s)", category_id, rsc->GetCurCategory(), rsc->GetDeviceID(), rsc->GetState(), cid, rsc->GetZoneId(), (app_id.empty() ? "" : app_id.c_str()));
 
diff --git a/src/manager/CResourceState.cpp b/src/manager/CResourceState.cpp
deleted file mode 100644 (file)
index f08c8a3..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*\r
- * Copyright (c) 2024 Samsung Electronics Co., Ltd All Rights Reserved\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- */\r
-\r
-#include <iostream>\r
-#include <CResourceState.h>\r
-\r
-CResourceState::CResourceState(int device_id, int category_type, int consumer_id, int state, std::string app_id)\r
-{\r
-       m_device_id = device_id;\r
-       m_category_type = category_type;\r
-       m_consumer_id = consumer_id;\r
-       m_state = state;\r
-       m_app_id = app_id;\r
-}
\ No newline at end of file
index c7b2abab2b1a675630c8805e8346c4b788e070fd..a9399fefd04e38c888e2c2d4efdd86ebf08a9d6b 100644 (file)
@@ -19,7 +19,7 @@
 #include <CResource.h>\r
 \r
 CVirtualResource::CVirtualResource(const int virtual_device_id, const rms_rsc_category_e category_type, unsigned int bw, std::set<unsigned int> dependent, bool is_main_device, const char *audio_codec, int category_class)\r
-:m_vir_rsc_id(virtual_device_id), m_category_type(category_type), m_vir_rsc_bw(bw), m_is_main_device(is_main_device), m_category_class(category_class)\r
+:m_vir_rsc_id(virtual_device_id), m_category_type(category_type), m_vir_rsc_bw(bw), m_is_main_device(is_main_device), m_category_class(category_class), m_rsc()\r
 {\r
        m_mem_clusters = dependent;\r
 \r
index 43354b0526b96ecfbca6484b89ae492c42c41287..b6fe90f8083b81b48225081c1e01a51d3716462d 100644 (file)
@@ -290,6 +290,11 @@ int CDependencyController::getReclaimableMemClusterConsumers(std::set<unsigned i
 \r
                for (auto const &it_consumer : consumers) {\r
                        consumer = c_container->findConsumer(it_consumer);\r
+                       if (!consumer) {\r
+                               SERVER_WARN("Consumer not found");\r
+                               continue;\r
+                       }\r
+\r
                        if (!consumer->GetAppID().compare(app_id)) {\r
                                SERVER_INFO("skip to check priority against same app (%s:%s)", consumer->GetAppID().c_str(), app_id.c_str());\r
                                continue;\r
index 0649621f842905a1778b664cd6b5241c31535e43..7da1ce8333a4117d5c588ff4d1650fd2e46ae49c 100644 (file)
@@ -45,7 +45,7 @@ bool CMemCluster::IsUsedBy(std::string app_id)
        if (m_consumers.size() == 0)\r
                return false;\r
 \r
-       for (auto it : m_consumers) {\r
+       for (const auto& it : m_consumers) {\r
                c = cc->findConsumer(it.first);\r
                if (!c)\r
                        continue;\r
@@ -112,7 +112,7 @@ std::set<int> CMemCluster::GetConsumers(void)
 {\r
        std::set<int> consumers;\r
 \r
-       for (auto it : m_consumers)\r
+       for (const auto& it : m_consumers)\r
                consumers.insert(it.first);\r
 \r
        return consumers;\r
index 9295d0282b90cf0a0133ffc86da722b31166dbb9..be8f4f8f6ae6cd154f0cd6b5678876d5d62de06b 100644 (file)
@@ -135,6 +135,7 @@ void CNormalModeStrategy::WriteAllocResult(rms_allocate_result_s *alloc_result,
        allocated_devices->device_ids = (int*) calloc(requests.size(), sizeof(int));\r
        assert(allocated_devices->device_ids);\r
        allocated_devices->devices = (rms_return_device_info_s*) calloc(requests.size(), sizeof(rms_return_device_info_s));\r
+       assert(allocated_devices->devices);\r
 \r
        int i = 0;\r
 \r
index 9bebbe6918f4c769acce43aa2e4022e73bd031c6..05c60a10005839eeb630301614a2a3e17d478948 100644 (file)
@@ -81,7 +81,9 @@ void CPreferenceModeStrategy::WriteAllocResult(rms_allocate_result_s *alloc_resu
 \r
        allocated_devices->resources_num = requests.size();\r
        allocated_devices->device_ids = (int*) calloc(requests.size(), sizeof(int));\r
+       assert(allocated_devices->device_ids);\r
        allocated_devices->devices = (rms_return_device_info_s*) calloc(requests.size(), sizeof(rms_return_device_info_s));\r
+       assert(allocated_devices->devices);\r
 \r
        int i = 0;\r
 \r
index dbdbd95b0ae37a990763af8771366067a637b5be..6e771a019c4ea41a47449c83ba9105814fb6adab 100644 (file)
 
 #include <iostream>
 
+using namespace std;
+
 int main(void)
 {
-       SERVER_INFO("RscMgr server main loop\n");
-       trace_begin("[RSC_MGR] main start");
-       trace_end();
+       try {
+               SERVER_INFO("RscMgr server main loop");
 
-       GMainLoop *main_loop;
-       main_loop = g_main_loop_new(NULL, FALSE);
+               GMainLoop *main_loop;
+               main_loop = g_main_loop_new(NULL, FALSE);
 
-       if (!main_loop) {
-               SERVER_ERR("failed to create a main loop\n");
-               return 0;
-       }
+               if (!main_loop) {
+                       throw runtime_error("Failed to create a main loop");
+               }
 
-       CResourceService *service = new(std::nothrow) CResourceService;
-       service->Init(main_loop);
+               CResourceService *service = new(std::nothrow) CResourceService;
+               service->Init(main_loop);
 
-       g_main_loop_ref(main_loop);
-       g_main_loop_run(main_loop);
+               g_main_loop_ref(main_loop);
+               g_main_loop_run(main_loop);
+       } catch (const exception& e) {
+               SERVER_ERR("Exception occurred %s", e.what());
+               return -1;
+       }
 
        return 0;
 }