From 7921ea260a3c6703c8fd5c40dce2350d1fcf39de Mon Sep 17 00:00:00 2001 From: YoungHun Kim Date: Fri, 16 Aug 2024 07:28:49 +0900 Subject: [PATCH] Fix the svace and coverity issue - UNINIT.CTOR.MANY RESOURCE_LEAK etc Change-Id: I2fa4c580ee38929d98f1af1f2ecd64adad3908c5 --- CMakeLists.txt | 1 - include_internal/CAsyncQueue.h | 2 +- include_internal/CDbusHandler.h | 8 +-- include_internal/CHandle.h | 16 +++--- include_internal/CHandleManager.h | 4 +- include_internal/CMessage.h | 6 +-- include_internal/CMessageHandler.h | 18 +++---- include_internal/CMessageQueue.h | 4 +- include_internal/CRequest.h | 30 +++++------ include_internal/CRequester.h | 8 +-- include_internal/CResourceService.h | 5 +- include_internal/manager/CConsumer.h | 6 +-- include_internal/manager/CResource.h | 50 +++++++++---------- include_internal/manager/CResourceCategory.h | 6 +-- include_internal/manager/CResourceDB.h | 4 +- include_internal/manager/CResourceManager.h | 8 +-- include_internal/manager/CResourceState.h | 11 ++-- include_internal/manager/CVirtualResource.h | 14 +++--- .../manager/dependence/CAudioCodec.h | 6 +-- .../manager/dependence/CBandwidth.h | 4 +- .../manager/dependence/CMemCluster.h | 6 +-- .../manager/dependence/CMixingMode.h | 2 +- packaging/rscmgr-service.spec | 2 +- src/CCallback.cpp | 7 +-- src/CDbusHandler.cpp | 2 +- src/CMessage.cpp | 2 +- src/CMessageHandler.cpp | 44 +++++++++++++--- src/CRequest.cpp | 26 ++-------- src/CResourceService.cpp | 5 ++ src/manager/CDebugUtils.cpp | 21 +++++--- src/manager/CResource.cpp | 10 +--- src/manager/CResourceCategory.cpp | 5 ++ src/manager/CResourceDB.cpp | 16 ++++-- src/manager/CResourceManager.cpp | 4 +- src/manager/CResourceState.cpp | 27 ---------- src/manager/CVirtualResource.cpp | 2 +- .../dependence/CDependencyController.cpp | 5 ++ src/manager/dependence/CMemCluster.cpp | 4 +- src/manager/strategy/CNormalModeStrategy.cpp | 1 + .../strategy/CPreferenceModeStrategy.cpp | 2 + src/rms_service.cpp | 30 ++++++----- 41 files changed, 226 insertions(+), 208 deletions(-) delete mode 100644 src/manager/CResourceState.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 8162b6a..1e67fc7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 diff --git a/include_internal/CAsyncQueue.h b/include_internal/CAsyncQueue.h index f5a7f13..2b3df53 100644 --- a/include_internal/CAsyncQueue.h +++ b/include_internal/CAsyncQueue.h @@ -38,7 +38,7 @@ public: int length(void); private: - GAsyncQueue *queue; + GAsyncQueue *queue {}; }; #endif // __C_ASYNC_QUEUE_H__ diff --git a/include_internal/CDbusHandler.h b/include_internal/CDbusHandler.h index 504563f..64310c1 100644 --- a/include_internal/CDbusHandler.h +++ b/include_internal/CDbusHandler.h @@ -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); diff --git a/include_internal/CHandle.h b/include_internal/CHandle.h index 2dfb6d4..95a8e65 100644 --- a/include_internal/CHandle.h +++ b/include_internal/CHandle.h @@ -20,17 +20,17 @@ 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]; }; diff --git a/include_internal/CHandleManager.h b/include_internal/CHandleManager.h index 9c27e92..7e2f614 100644 --- a/include_internal/CHandleManager.h +++ b/include_internal/CHandleManager.h @@ -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 m_handles; }; diff --git a/include_internal/CMessage.h b/include_internal/CMessage.h index f7280d3..1f0d962 100644 --- a/include_internal/CMessage.h +++ b/include_internal/CMessage.h @@ -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); diff --git a/include_internal/CMessageHandler.h b/include_internal/CMessageHandler.h index f8c3c0d..62d18b5 100644 --- a/include_internal/CMessageHandler.h +++ b/include_internal/CMessageHandler.h @@ -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]; diff --git a/include_internal/CMessageQueue.h b/include_internal/CMessageQueue.h index bf84783..c831cc7 100644 --- a/include_internal/CMessageQueue.h +++ b/include_internal/CMessageQueue.h @@ -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; diff --git a/include_internal/CRequest.h b/include_internal/CRequest.h index fa52674..55cb196 100644 --- a/include_internal/CRequest.h +++ b/include_internal/CRequest.h @@ -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__ diff --git a/include_internal/CRequester.h b/include_internal/CRequester.h index 0cd015a..f179d28 100644 --- a/include_internal/CRequester.h +++ b/include_internal/CRequester.h @@ -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; }; diff --git a/include_internal/CResourceService.h b/include_internal/CResourceService.h index e8e4e5d..5bdafc1 100644 --- a/include_internal/CResourceService.h +++ b/include_internal/CResourceService.h @@ -23,13 +23,13 @@ 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__ diff --git a/include_internal/manager/CConsumer.h b/include_internal/manager/CConsumer.h index 2292aaa..5b373f1 100644 --- a/include_internal/manager/CConsumer.h +++ b/include_internal/manager/CConsumer.h @@ -56,9 +56,9 @@ private: std::set 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; }; diff --git a/include_internal/manager/CResource.h b/include_internal/manager/CResource.h index 63a3bcc..dba9b23 100644 --- a/include_internal/manager/CResource.h +++ b/include_internal/manager/CResource.h @@ -107,35 +107,35 @@ private: std::set m_shared_consumers; std::set 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 m_observers; std::set 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__ diff --git a/include_internal/manager/CResourceCategory.h b/include_internal/manager/CResourceCategory.h index acf20df..53673ea 100644 --- a/include_internal/manager/CResourceCategory.h +++ b/include_internal/manager/CResourceCategory.h @@ -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 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 *time_resource_map); }; diff --git a/include_internal/manager/CResourceDB.h b/include_internal/manager/CResourceDB.h index f10ac54..44be83c 100644 --- a/include_internal/manager/CResourceDB.h +++ b/include_internal/manager/CResourceDB.h @@ -109,8 +109,8 @@ private: std::map 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 m_reclaim_rscs; // resources reclaiming std::map m_active_vdecs; // device id, consumer id diff --git a/include_internal/manager/CResourceManager.h b/include_internal/manager/CResourceManager.h index 29594f4..b1ef76d 100644 --- a/include_internal/manager/CResourceManager.h +++ b/include_internal/manager/CResourceManager.h @@ -66,11 +66,11 @@ private: void MakeConsumerInfoToBeReturned(consumer_reclaim_s *return_consumer, std::map > *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 {}; }; diff --git a/include_internal/manager/CResourceState.h b/include_internal/manager/CResourceState.h index 911346f..5e17df0 100644 --- a/include_internal/manager/CResourceState.h +++ b/include_internal/manager/CResourceState.h @@ -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; }; diff --git a/include_internal/manager/CVirtualResource.h b/include_internal/manager/CVirtualResource.h index eed50b8..e9bdad5 100644 --- a/include_internal/manager/CVirtualResource.h +++ b/include_internal/manager/CVirtualResource.h @@ -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 m_mem_clusters; std::string m_audio_codec; - CResource *m_rsc; + CResource *m_rsc {}; }; #endif // _RM_VIRTUAL_RESOURCE_H_INCLUDED diff --git a/include_internal/manager/dependence/CAudioCodec.h b/include_internal/manager/dependence/CAudioCodec.h index 1dcb59a..76e8a5c 100644 --- a/include_internal/manager/dependence/CAudioCodec.h +++ b/include_internal/manager/dependence/CAudioCodec.h @@ -41,10 +41,10 @@ public: private: bool isUnknownCodec(void) { return (m_name.length() == 0); } std::string m_name; - unsigned int m_ref_count; - unsigned int m_ref_count_max; + unsigned int m_ref_count {}; + unsigned int m_ref_count_max {}; std::map m_consumers; // consumer id, ref_count std::map m_resources; // device_id, consumer id }; -#endif //__CAUDIO_CODEC_H__ \ No newline at end of file +#endif //__CAUDIO_CODEC_H__ diff --git a/include_internal/manager/dependence/CBandwidth.h b/include_internal/manager/dependence/CBandwidth.h index 68bdfdc..68a4a93 100644 --- a/include_internal/manager/dependence/CBandwidth.h +++ b/include_internal/manager/dependence/CBandwidth.h @@ -46,8 +46,8 @@ private: std::map m_consumers; // device_id, consumer_id std::map> m_ndec_consumers; // category id, - unsigned int m_max; - unsigned int m_avail; + unsigned int m_max {}; + unsigned int m_avail {}; }; #endif //__CBANDWIDTH_H__ diff --git a/include_internal/manager/dependence/CMemCluster.h b/include_internal/manager/dependence/CMemCluster.h index e49b77a..84769ba 100644 --- a/include_internal/manager/dependence/CMemCluster.h +++ b/include_internal/manager/dependence/CMemCluster.h @@ -40,10 +40,10 @@ public: void ClearConsumers(void); std::set GetConsumers(void); private: - unsigned int m_id; + unsigned int m_id {}; std::map> m_consumers; // consumer, device ids - int m_category_class; - int m_category_id; + int m_category_class {}; + int m_category_id {}; }; #endif //__CMEM_CLUSTER_H__ diff --git a/include_internal/manager/dependence/CMixingMode.h b/include_internal/manager/dependence/CMixingMode.h index 002ca7e..55734b4 100644 --- a/include_internal/manager/dependence/CMixingMode.h +++ b/include_internal/manager/dependence/CMixingMode.h @@ -32,7 +32,7 @@ public: rms_mixing_mode_e getMode(void) { return m_mode; } std::map GetConsumers(void) { return m_consumers; } private: - rms_mixing_mode_e m_mode; + rms_mixing_mode_e m_mode { RMS_MIXING_MODE_DEFAULT }; std::map m_audio_codecs; std::map m_consumers; // device id, consumer id }; diff --git a/packaging/rscmgr-service.spec b/packaging/rscmgr-service.spec index 9fa7ee8..600083d 100644 --- a/packaging/rscmgr-service.spec +++ b/packaging/rscmgr-service.spec @@ -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 diff --git a/src/CCallback.cpp b/src/CCallback.cpp index 3422b68..1207408 100644 --- a/src/CCallback.cpp +++ b/src/CCallback.cpp @@ -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; diff --git a/src/CDbusHandler.cpp b/src/CDbusHandler.cpp index 7f213b2..7fd9d9c 100644 --- a/src/CDbusHandler.cpp +++ b/src/CDbusHandler.cpp @@ -86,7 +86,7 @@ const std::string CDbusHandler::m_methods = "" ""; -CDbusHandler::CDbusHandler(CAsyncQueue *queue) +CDbusHandler::CDbusHandler(CAsyncQueue *queue) : m_own_id() { assert(queue); m_async_queue = queue; diff --git a/src/CMessage.cpp b/src/CMessage.cpp index 00fda5a..3c29bad 100644 --- a/src/CMessage.cpp +++ b/src/CMessage.cpp @@ -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); diff --git a/src/CMessageHandler.cpp b/src/CMessageHandler.cpp index 08f1276..430199a 100644 --- a/src/CMessageHandler.cpp +++ b/src/CMessageHandler.cpp @@ -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"); } } } diff --git a/src/CRequest.cpp b/src/CRequest.cpp index bf4500c..6eb4985 100644 --- a/src/CRequest.cpp +++ b/src/CRequest.cpp @@ -21,23 +21,6 @@ #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; } diff --git a/src/CResourceService.cpp b/src/CResourceService.cpp index 124281b..6f36317 100644 --- a/src/CResourceService.cpp +++ b/src/CResourceService.cpp @@ -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; } diff --git a/src/manager/CDebugUtils.cpp b/src/manager/CDebugUtils.cpp index 5e24806..9d5d0a8 100644 --- a/src/manager/CDebugUtils.cpp +++ b/src/manager/CDebugUtils.cpp @@ -347,17 +347,24 @@ int rms_get_cmd_name(pid_t pid, char *name_out, int size) size_t sz; snprintf(name, sizeof(name), "/proc/%d/cmdline", pid); + // Check if the process exists and is accessible + if (access(name, R_OK) != 0) { + SERVER_ERR("failed to access (%s) : %d", name, errno); + return RMS_ERROR; + } + f = fopen(name, "r"); if (!f) { SERVER_ERR("failed to open cmdline(%s) : %d", name, errno); return RMS_ERROR; - } else { - sz = fread(name, sizeof(char), sizeof(name)-1, f); - name[sz] = '\0'; - fclose(f); } + sz = fread(name, sizeof(char), sizeof(name)-1, f); + name[sz] = '\0'; + fclose(f); + snprintf(name_out, size, "%s", name); + return RMS_OK; } @@ -382,7 +389,7 @@ void rms_print_log_console(char *buf) } ret = clock_gettime(CLOCK_MONOTONIC, &tnow); - snprintf(output, RMS_CONSOLE_BUF_SIZE, "[RMS][%ld.%6ld] %s\n", tnow.tv_sec, tnow.tv_nsec/1000, buf); + snprintf(output, RMS_CONSOLE_BUF_SIZE, "[RMS][%ld.%6ld] %s", tnow.tv_sec, tnow.tv_nsec/1000, buf); ret = write(fd, output, strlen(output)); if (ret < 0) { @@ -416,7 +423,7 @@ int rm_is_valid_pid(int pid) return 1; } - SERVER_ERR("pid(%d)/errno(%d)", pid, errno); + SERVER_ERR("pid(%d) / errno(%d)", pid, errno); return (errno == ESRCH) ? 0 : 1; } @@ -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(), "
"); if (system_info_get_custom_string("com.samsung/featureconf/product.chipset", &chipset_info)!= SYSTEM_INFO_ERROR_NONE) { - SERVER_ERR("Failed to get chipset from system-info\n"); + SERVER_ERR("Failed to get chipset from system-info"); goto end; } diff --git a/src/manager/CResource.cpp b/src/manager/CResource.cpp index 11505ed..1b7fb61 100644 --- a/src/manager/CResource.cpp +++ b/src/manager/CResource.cpp @@ -58,18 +58,10 @@ void CResource::m_SetSubScalerFlag(int next_state) } CResource::CResource(const int device_id, const rms_rsc_category_e category_type, const char *name, const char *path, - std::set mem_cluster, int is_main_device, const char *audio_codec, int sharable_count) + std::set mem_cluster, int is_main_device, const char *audio_codec, int sharable_count) :m_id(device_id), m_device_name(name), m_device_path(path), m_is_main_device(is_main_device), m_sharable_count(sharable_count) { - m_state = RMS_INTERNAL_STATE_FREE; - m_occupied_bw = 0; - m_default_bw = 0; - m_is_reserved = false; - m_reserved_consumer_id = 0; - m_mixing_mode = RMS_MIXING_MODE_DEFAULT; m_mem_clusters = mem_cluster; - m_virtual_id = 0; - m_mv_zone_id = -1; if (audio_codec) m_audio_codec.assign(audio_codec); diff --git a/src/manager/CResourceCategory.cpp b/src/manager/CResourceCategory.cpp index 0633a61..4cae0b1 100644 --- a/src/manager/CResourceCategory.cpp +++ b/src/manager/CResourceCategory.cpp @@ -35,6 +35,11 @@ CResourceCategory::CResourceCategory(IN rms_rsc_category_e resource_category_id, assert(m_alloc_strategy); } +CResourceCategory::~CResourceCategory() +{ + delete m_alloc_strategy; +} + void CResourceCategory::AddVirtualResource(IN int device_id, IN CVirtualResource *vresource) { std::map::iterator it = m_device_id_to_vresource_map.find(device_id); diff --git a/src/manager/CResourceDB.cpp b/src/manager/CResourceDB.cpp index 12751ec..ce93b02 100644 --- a/src/manager/CResourceDB.cpp +++ b/src/manager/CResourceDB.cpp @@ -507,6 +507,12 @@ void CResourceDB::NotifyResourceStateUpdatedAsync(CResource *resource, int consu { int device_id = resource->GetDeviceID(); CConsumer *consumer = CConsumerContainer::getInstance()->findConsumer(consumer_id); + + if (!consumer) { + SERVER_WARN("Consumer %d is not found", consumer_id); + return; + } + std::string app_id = consumer->GetAppID(); if (app_id.empty()) @@ -536,10 +542,14 @@ CResource *CResourceDB::FindMainResource(rms_rsc_category_e category_id) void CResourceDB::FindMainResources(IN std::map *resource_map) { - 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}; + 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}; CResource *resource = NULL; - for (int i = 0; i < 6; i++) { + for (int i = 0; i < 5; i++) { resource = FindMainResource(categories[i]); if (!resource) { SERVER_INFO("no main resource for (%d)", categories[i]); @@ -728,7 +738,7 @@ void CResourceDB::SwapResource(std::set consumers, int cur_device_id, int n continue; } - SERVER_INFO("swap resource (%d):(%d>%d)", it, cur_device_id, new_device_id); + SERVER_INFO("swap resource (%d) :(%d>%d)", it, cur_device_id, new_device_id); if (consumer->IsUsingResource(new_device_id)) { SERVER_INFO("no need to swap (%d:%d)", it, new_device_id); diff --git a/src/manager/CResourceManager.cpp b/src/manager/CResourceManager.cpp index 166b724..fbb9341 100644 --- a/src/manager/CResourceManager.cpp +++ b/src/manager/CResourceManager.cpp @@ -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 index f08c8a3..0000000 --- a/src/manager/CResourceState.cpp +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2024 Samsung Electronics Co., Ltd All Rights Reserved - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include - -CResourceState::CResourceState(int device_id, int category_type, int consumer_id, int state, std::string app_id) -{ - m_device_id = device_id; - m_category_type = category_type; - m_consumer_id = consumer_id; - m_state = state; - m_app_id = app_id; -} \ No newline at end of file diff --git a/src/manager/CVirtualResource.cpp b/src/manager/CVirtualResource.cpp index c7b2aba..a9399fe 100644 --- a/src/manager/CVirtualResource.cpp +++ b/src/manager/CVirtualResource.cpp @@ -19,7 +19,7 @@ #include CVirtualResource::CVirtualResource(const int virtual_device_id, const rms_rsc_category_e category_type, unsigned int bw, std::set dependent, bool is_main_device, const char *audio_codec, int category_class) -: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_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() { m_mem_clusters = dependent; diff --git a/src/manager/dependence/CDependencyController.cpp b/src/manager/dependence/CDependencyController.cpp index 43354b0..b6fe90f 100644 --- a/src/manager/dependence/CDependencyController.cpp +++ b/src/manager/dependence/CDependencyController.cpp @@ -290,6 +290,11 @@ int CDependencyController::getReclaimableMemClusterConsumers(std::setfindConsumer(it_consumer); + if (!consumer) { + SERVER_WARN("Consumer not found"); + continue; + } + if (!consumer->GetAppID().compare(app_id)) { SERVER_INFO("skip to check priority against same app (%s:%s)", consumer->GetAppID().c_str(), app_id.c_str()); continue; diff --git a/src/manager/dependence/CMemCluster.cpp b/src/manager/dependence/CMemCluster.cpp index 0649621..7da1ce8 100644 --- a/src/manager/dependence/CMemCluster.cpp +++ b/src/manager/dependence/CMemCluster.cpp @@ -45,7 +45,7 @@ bool CMemCluster::IsUsedBy(std::string app_id) if (m_consumers.size() == 0) return false; - for (auto it : m_consumers) { + for (const auto& it : m_consumers) { c = cc->findConsumer(it.first); if (!c) continue; @@ -112,7 +112,7 @@ std::set CMemCluster::GetConsumers(void) { std::set consumers; - for (auto it : m_consumers) + for (const auto& it : m_consumers) consumers.insert(it.first); return consumers; diff --git a/src/manager/strategy/CNormalModeStrategy.cpp b/src/manager/strategy/CNormalModeStrategy.cpp index 9295d02..be8f4f8 100644 --- a/src/manager/strategy/CNormalModeStrategy.cpp +++ b/src/manager/strategy/CNormalModeStrategy.cpp @@ -135,6 +135,7 @@ void CNormalModeStrategy::WriteAllocResult(rms_allocate_result_s *alloc_result, allocated_devices->device_ids = (int*) calloc(requests.size(), sizeof(int)); assert(allocated_devices->device_ids); allocated_devices->devices = (rms_return_device_info_s*) calloc(requests.size(), sizeof(rms_return_device_info_s)); + assert(allocated_devices->devices); int i = 0; diff --git a/src/manager/strategy/CPreferenceModeStrategy.cpp b/src/manager/strategy/CPreferenceModeStrategy.cpp index 9bebbe6..05c60a1 100644 --- a/src/manager/strategy/CPreferenceModeStrategy.cpp +++ b/src/manager/strategy/CPreferenceModeStrategy.cpp @@ -81,7 +81,9 @@ void CPreferenceModeStrategy::WriteAllocResult(rms_allocate_result_s *alloc_resu allocated_devices->resources_num = requests.size(); allocated_devices->device_ids = (int*) calloc(requests.size(), sizeof(int)); + assert(allocated_devices->device_ids); allocated_devices->devices = (rms_return_device_info_s*) calloc(requests.size(), sizeof(rms_return_device_info_s)); + assert(allocated_devices->devices); int i = 0; diff --git a/src/rms_service.cpp b/src/rms_service.cpp index dbdbd95..6e771a0 100644 --- a/src/rms_service.cpp +++ b/src/rms_service.cpp @@ -20,25 +20,29 @@ #include +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; } -- 2.34.1