2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 // Licensed under the Apache License, Version 2.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
18 * @file FSys_SettingService.cpp
19 * @brief This is the implementation file for _SettingService class.
22 #include <unique_ptr.h>
24 #include <FBaseBoolean.h>
25 #include <FBaseInteger.h>
26 #include <FBaseSysLog.h>
28 #include <FIo_IpcServer.h>
29 #include <FIo_AppServiceIpcMessages.h>
30 #include <FSec_AccessController.h>
32 #include "FSys_SettingService.h"
35 using namespace Tizen::App;
36 using namespace Tizen::Base;
37 using namespace Tizen::Base::Collection;
38 using namespace Tizen::Io;
39 using namespace Tizen::Security;
41 namespace Tizen { namespace System {
43 const static wchar_t* SETTING_SERVICE_ID = L"osp.sys.ipcserver.setting_service";
45 const static wchar_t* SETTING_SERVICE_COMMAND_GET_BOOL = L"osp.sys.ipcserver.setting_service.command.get.bool";
46 const static wchar_t* SETTING_SERVICE_COMMAND_GET_INT = L"osp.sys.ipcserver.setting_service.command.get.int";
47 const static wchar_t* SETTING_SERVICE_COMMAND_GET_STRING = L"osp.sys.ipcserver.setting_service.command.get.string";
48 const static wchar_t* SETTING_SERVICE_COMMAND_SET_BOOL = L"osp.sys.ipcserver.setting_service.command.set.bool";
49 const static wchar_t* SETTING_SERVICE_COMMAND_SET_INT = L"osp.sys.ipcserver.setting_service.command.set.int";
50 const static wchar_t* SETTING_SERVICE_COMMAND_SET_STRING = L"osp.sys.ipcserver.setting_service.command.set.string";
51 const static wchar_t* SETTING_SERVICE_COMMAND_SET_PRIV_BOOL = L"osp.sys.ipcserver.setting_service.command.set.priv.bool";
52 const static wchar_t* SETTING_SERVICE_COMMAND_SET_PRIV_STRING = L"osp.sys.ipcserver.setting_service.command.set.priv.string";
53 const static wchar_t* SETTING_SERVICE_COMMAND_SET_ASYNC_BOOL = L"osp.sys.ipcserver.setting_service.command.set.async.bool";
54 const static wchar_t* SETTING_SERVICE_COMMAND_SET_PRIV_ASYNC_BOOL = L"osp.sys.ipcserver.setting_service.command.set.priv.async.bool";
55 const static wchar_t* SETTING_SERVICE_COMMAND_RESULT = L"osp.sys.ipcserver.setting_service.command.result";
57 const static wchar_t* SETTING_SERVICE_COMMAND_SUBSCRIBE = L"osp.sys.ipcserver.setting_service.command.subscribe";
58 const static wchar_t* SETTING_SERVICE_COMMAND_UNSUBSCRIBE = L"osp.sys.ipcserver.setting_service.command.unsubscribe";
59 const static wchar_t* SETTING_SERVICE_COMMAND_EVENT = L"osp.sys.ipcserver.setting_service.command.event";
61 const static wchar_t* SETTING_SERVICE_COMMAND_SUPPORTED = L"osp.sys.ipcserver.setting_service.command.supported";
63 const static wchar_t* SETTING_SERVICE_COMMAND_SUBSCRIBE_INTERNAL = L"osp.sys.ipcserver.setting_service.command.subscribe.internal";
64 const static wchar_t* SETTING_SERVICE_COMMAND_UNSUBSCRIBE_INTERNAL = L"osp.sys.ipcserver.setting_service.command.unsubscribe.internal";
65 const static wchar_t* SETTING_SERVICE_COMMAND_EVENT_INTERNAL = L"osp.sys.ipcserver.setting_service.command.event.internal";
67 const static int SETTING_SERVICE_IPC_MSG_COMMAND = 0;
68 const static int SETTING_SERVICE_IPC_MSG_KEY = 1;
69 const static int SETTING_SERVICE_IPC_MSG_VALUE = 2;
71 const static wchar_t* _SETTINGS_KEY_FONT_SIZE = L"http://tizen.org/setting/font.size";
72 const static wchar_t* _SETTINGS_KEY_FONT_TYPE = L"http://tizen.org/setting/font.type";
73 const static wchar_t* _SETTINGS_KEY_LOCALE_COUNTRY = L"http://tizen.org/setting/locale.country";
74 const static wchar_t* _SETTINGS_KEY_LOCALE_LANGUAGE = L"http://tizen.org/setting/locale.language";
76 _SettingService* _SettingService::__pSettingService = null;
78 _SettingService::_SettingService()
79 : __serviceId(SETTING_SERVICE_ID)
80 , __pSettingInfo(null)
81 , __asyncList(SingleObjectDeleter)
82 , __eventList(SingleObjectDeleter)
83 , __eventListForInternal(SingleObjectDeleter)
87 r = __ipcServer.Construct(__serviceId, *this, true);
88 SysTryReturnVoidResult(NID_SYS, r == E_SUCCESS, r, "It is failed to construct IPC server.");
90 __pSettingInfo = _SettingInfo::GetInstance();
91 SysTryCatch(NID_SYS, __pSettingInfo != null, r = E_SYSTEM, E_SYSTEM, "It is failed to get instance of _SettingInfo.");
93 __pSettingInfo->AddSettingEventListener(*this);
94 r = __asyncList.Construct();
95 SysTryCatch(NID_SYS, r == E_SUCCESS, , r, "It is failed to construct async list.");
97 r = __eventList.Construct();
98 SysTryCatch(NID_SYS, r == E_SUCCESS, , r, "It is failed to construct event list.");
100 r = __eventListForInternal.Construct();
101 SysTryCatch(NID_SYS, r == E_SUCCESS, , r, "It is failed to construct event list for internal.");
103 r = __ipcServer.Start();
104 SysTryCatch(NID_SYS, r == E_SUCCESS, , r, "It is failed to start IPC server.");
106 r = __responseMessage.Construct();
107 SysTryCatch(NID_SYS, r == E_SUCCESS, , r, "It is failed to create response message container.");
112 __pSettingInfo = null;
113 SysLogException(NID_SYS, r, "It is failed to construct _SettingService.");
118 _SettingService::~_SettingService()
120 __pSettingInfo->RemoveSettingEventListener(*this);
121 __pSettingInfo = null;
122 result r = __ipcServer.Stop();
123 __responseMessage.RemoveAll(true);
124 SysTryReturnVoidResult(NID_SYS, r == E_SUCCESS, r, "It is failed to stop IPC server.");
128 _SettingService::GetInstance(void)
130 static pthread_once_t onceBlock = PTHREAD_ONCE_INIT;
131 if(__pSettingService == null)
133 pthread_once(&onceBlock, InitSingleton);
135 return __pSettingService;
139 _SettingService::InitSingleton(void)
141 _SettingService* pSettingService = new (nothrow) _SettingService();
142 SysTryReturnVoidResult(NID_SYS, pSettingService != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
144 __pSettingService = pSettingService;
145 atexit(DestroySingleton);
149 _SettingService::OnIpcRequestReceived(_IpcServer& server, const IPC::Message& message)
151 __currentPkgId = server.GetClientPackageId();
152 __currentPid = server.GetClientId();
153 IPC_BEGIN_MESSAGE_MAP(_SettingService, message)
154 IPC_MESSAGE_HANDLER_EX(IoService_Request, &server, OnRequestOccured)
155 IPC_END_MESSAGE_MAP_EX()
159 _SettingService::OnRequestOccured(const ArrayList& request, ArrayList* response)
161 result r = E_SUCCESS;
162 String* pCommand = null;
164 String* pValue = null;
166 SysTryCatch(NID_SYS, response != null, r = E_SYSTEM, r, "There is no response instance.");
168 __responseMessage.RemoveAll(true);
169 pCommand = (String*)request.GetAt(SETTING_SERVICE_IPC_MSG_COMMAND);
170 SysTryCatch(NID_SYS, pCommand != null, r = E_SYSTEM, r, "There is no command information.");
172 SysLog(NID_SYS, "Required command is [%ls].", pCommand->GetPointer());
174 if(*pCommand == SETTING_SERVICE_COMMAND_GET_INT)
178 pKey = (String*)request.GetAt(SETTING_SERVICE_IPC_MSG_KEY);
179 SysTryCatch(NID_SYS, pKey != null, r = E_SYSTEM, r, "There is no key information.");
180 r = __pSettingInfo->GetValue(*pKey, value);
181 pValue = new (nothrow) String();
182 SysTryCatch(NID_SYS, pValue != null, r = E_SYSTEM, r, "It is failed to create pValue.");
183 pValue->Append(value);
185 else if(*pCommand == SETTING_SERVICE_COMMAND_GET_BOOL)
189 pKey = (String*)request.GetAt(SETTING_SERVICE_IPC_MSG_KEY);
190 SysTryCatch(NID_SYS, pKey != null, r = E_SYSTEM, r, "There is no key information.");
191 r = __pSettingInfo->GetValue(*pKey, value);
192 pValue = new (nothrow) String();
193 SysTryCatch(NID_SYS, pValue != null, r = E_SYSTEM, r, "It is failed to create pValue.");
194 pValue->Append(value);
196 else if(*pCommand == SETTING_SERVICE_COMMAND_GET_STRING)
200 pKey = (String*)request.GetAt(SETTING_SERVICE_IPC_MSG_KEY);
201 SysTryCatch(NID_SYS, pKey != null, r = E_SYSTEM, r, "There is no key information.");
202 r = __pSettingInfo->GetValue(*pKey, value);
203 pValue = new (nothrow) String(value);
205 else if(*pCommand == SETTING_SERVICE_COMMAND_SET_INT)
209 r = _AccessController::CheckSystemPrivilege(__currentPkgId, _PRV_SETTING);
210 SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_PRIVILEGE_DENIED, r, "The application[%ls] does not have the privilege to call this method.", __currentPkgId.GetPointer());
212 pKey = (String*)request.GetAt(SETTING_SERVICE_IPC_MSG_KEY);
213 SysTryCatch(NID_SYS, pKey != null, r = E_SYSTEM, r, "There is no key information.");
214 pValue = (String*)request.GetAt(SETTING_SERVICE_IPC_MSG_VALUE);
215 Integer::Parse(*pValue, value);
216 r = __pSettingInfo->SetValue(*pKey, value);
218 else if(*pCommand == SETTING_SERVICE_COMMAND_SET_BOOL)
222 r = _AccessController::CheckSystemPrivilege(__currentPkgId, _PRV_SETTING);
223 SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_PRIVILEGE_DENIED, r, "The application[%ls] does not have the privilege to call this method.", __currentPkgId.GetPointer());
225 pKey = (String*)request.GetAt(SETTING_SERVICE_IPC_MSG_KEY);
226 SysTryCatch(NID_SYS, pKey != null, r = E_SYSTEM, r, "There is no key information.");
227 pValue = (String*)request.GetAt(SETTING_SERVICE_IPC_MSG_VALUE);
228 value = Boolean::Parse(*pValue);
229 r = __pSettingInfo->SetValue(*pKey, value);
231 else if(*pCommand == SETTING_SERVICE_COMMAND_SET_STRING)
234 r = _AccessController::CheckSystemPrivilege(__currentPkgId, _PRV_SETTING);
235 SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_PRIVILEGE_DENIED, r, "The application[%ls] does not have the privilege to call this method.", __currentPkgId.GetPointer());
237 pKey = (String*)request.GetAt(SETTING_SERVICE_IPC_MSG_KEY);
238 SysTryCatch(NID_SYS, pKey != null, r = E_SYSTEM, r, "There is no key information.");
239 pValue = (String*)request.GetAt(SETTING_SERVICE_IPC_MSG_VALUE);
240 r = __pSettingInfo->SetValue(*pKey, *pValue);
242 else if(*pCommand == SETTING_SERVICE_COMMAND_SET_PRIV_BOOL)
246 r = _AccessController::CheckSystemPrivilege(__currentPkgId, _PRV_SYSTEMSETTING_WRITE, _PRV_SETTINGMANAGER_WRITE);
247 SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_PRIVILEGE_DENIED, r, "The application[%ls] does not have the privilege to call this method.", __currentPkgId.GetPointer());
249 pKey = (String*)request.GetAt(SETTING_SERVICE_IPC_MSG_KEY);
250 SysTryCatch(NID_SYS, pKey != null, r = E_SYSTEM, r, "There is no key information.");
251 pValue = (String*)request.GetAt(SETTING_SERVICE_IPC_MSG_VALUE);
252 value = Boolean::Parse(*pValue);
253 r = __pSettingInfo->SetValueForPrivilegedKey(*pKey, value);
255 else if(*pCommand == SETTING_SERVICE_COMMAND_SET_PRIV_STRING)
257 r = _AccessController::CheckSystemPrivilege(__currentPkgId, _PRV_SYSTEMSETTING_WRITE, _PRV_SETTINGMANAGER_WRITE);
258 SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_PRIVILEGE_DENIED, r, "The application[%ls] does not have the privilege to call this method.", __currentPkgId.GetPointer());
260 pKey = (String*)request.GetAt(SETTING_SERVICE_IPC_MSG_KEY);
261 SysTryCatch(NID_SYS, pKey != null, r = E_SYSTEM, r, "There is no key information.");
262 pValue = (String*)request.GetAt(SETTING_SERVICE_IPC_MSG_VALUE);
263 r = __pSettingInfo->SetValueForPrivilegedKey(*pKey, *pValue);
265 else if(*pCommand == SETTING_SERVICE_COMMAND_SET_ASYNC_BOOL)
269 r = _AccessController::CheckSystemPrivilege(__currentPkgId, _PRV_SETTING);
270 SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_PRIVILEGE_DENIED, r, "The application[%ls] does not have the privilege to call this method.", __currentPkgId.GetPointer());
272 pKey = (String*)request.GetAt(SETTING_SERVICE_IPC_MSG_KEY);
273 SysTryCatch(NID_SYS, pKey != null, r = E_SYSTEM, r, "There is no key information.");
274 pValue = (String*)request.GetAt(SETTING_SERVICE_IPC_MSG_VALUE);
276 SysLog(NID_SYS, "Key is %ls, Value is %ls, pid is %d.", pKey->GetPointer(), pValue->GetPointer(), __currentPid);
277 if(*pValue == L"true")
285 unique_ptr<String> reservedKey(new (nothrow)String(*pKey));
286 SysTryCatch(NID_SYS, __asyncList.ContainsKey(*(reservedKey.get())) == false, r = E_IN_PROGRESS, r, "Required key(%ls) is already under processing.", pKey->GetPointer());
287 unique_ptr<Integer> reservedPid(new (nothrow)Integer(__currentPid));
289 r = __asyncList.Add(reservedKey.get(), reservedPid.get());
290 SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_SYSTEM, r, "It is failed to add aync list.");
291 reservedPid.release();
292 reservedKey.release();
294 r = __pSettingInfo->SetValueAsync(*pKey, value, this);
297 __asyncList.Remove(*pKey);
299 SysLog(NID_SYS, "Result is %s.", GetErrorMessage(r));
301 else if(*pCommand == SETTING_SERVICE_COMMAND_SET_PRIV_ASYNC_BOOL)
304 r = _AccessController::CheckSystemPrivilege(__currentPkgId, _PRV_SYSTEMSETTING_WRITE, _PRV_SETTINGMANAGER_WRITE);
305 SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_PRIVILEGE_DENIED, r, "The application[%ls] does not have the privilege to call this method.", __currentPkgId.GetPointer());
307 pKey = (String*)request.GetAt(SETTING_SERVICE_IPC_MSG_KEY);
308 SysTryCatch(NID_SYS, pKey != null, r = E_SYSTEM, r, "There is no key information.");
309 pValue = (String*)request.GetAt(SETTING_SERVICE_IPC_MSG_VALUE);
311 SysLog(NID_SYS, "Key is %ls, Value is %ls, pid is %d.", pKey->GetPointer(), pValue->GetPointer(), __currentPid);
312 if(*pValue == L"true")
321 unique_ptr<String> reservedKey(new (nothrow)String(*pKey));
322 SysTryCatch(NID_SYS, __asyncList.ContainsKey(*(reservedKey.get())) == false, r = E_IN_PROGRESS, r, "Required key(%ls) is already under processing.", pKey->GetPointer());
323 unique_ptr<Integer> reservedPid(new (nothrow)Integer(__currentPid));
325 r = __asyncList.Add(reservedKey.get(), reservedPid.get());
326 SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_SYSTEM, r, "It is failed to add aync list.");
327 reservedPid.release();
328 reservedKey.release();
330 r = __pSettingInfo->SetValueAsyncForPrivilegedKey(*pKey, value, this);
333 __asyncList.Remove(*pKey);
335 SysLog(NID_SYS, "Result is %s.", GetErrorMessage(r));
337 else if(*pCommand == SETTING_SERVICE_COMMAND_SUBSCRIBE)
339 unique_ptr<Integer> pid(new (nothrow) Integer(__currentPid));
341 SysTryCatch(NID_SYS, __eventList.Contains(*(pid.get())) == false, r = E_OBJ_ALREADY_EXIST, r, "Required application(%ls, %d) is already subscribe event.", __currentPkgId.GetPointer(), __currentPid);
342 r = __eventList.Add(pid.get());
343 SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_SYSTEM, r, "It is failed to add application(%ls, %d) on event list", __currentPkgId.GetPointer(), __currentPid);
346 else if(*pCommand == SETTING_SERVICE_COMMAND_UNSUBSCRIBE)
348 unique_ptr<Integer> pid(new (nothrow) Integer(__currentPid));
350 SysTryCatch(NID_SYS, __eventList.Contains(*(pid.get())) == true, r = E_OBJ_NOT_FOUND, r, "Required application(%ls, %d) is not subscribe event.", __currentPkgId.GetPointer(), __currentPid);
351 r = __eventList.Remove(*(pid.get()), true);
352 SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_SYSTEM, r, "It is failed to remove application(%ls, %d) on event list", __currentPkgId.GetPointer(), __currentPid);
355 else if(*pCommand == SETTING_SERVICE_COMMAND_SUPPORTED)
359 pKey = (String*)request.GetAt(SETTING_SERVICE_IPC_MSG_KEY);
360 SysTryCatch(NID_SYS, pKey != null, r = E_SYSTEM, r, "There is no key information.");
361 value = __pSettingInfo->HasKey(*pKey);
362 SysLog(NID_SYS, "%ls is %d.", pKey->GetPointer(), value);
363 pValue = new (nothrow) String();
364 SysTryCatch(NID_SYS, pValue != null, r = E_SYSTEM, r, "It is failed to create pValue.");
365 pValue->Append(value);
367 else if(*pCommand == SETTING_SERVICE_COMMAND_SUBSCRIBE_INTERNAL)
369 unique_ptr<Integer> pid(new (nothrow) Integer(__currentPid));
371 SysTryCatch(NID_SYS, __eventListForInternal.Contains(*(pid.get())) == false, r = E_OBJ_ALREADY_EXIST, r, "Required application(%ls, %d) is already subscribe event.", __currentPkgId.GetPointer(), __currentPid);
372 r = __eventListForInternal.Add(pid.get());
373 SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_SYSTEM, r, "It is failed to add application(%ls, %d) on event list", __currentPkgId.GetPointer(), __currentPid);
376 else if(*pCommand == SETTING_SERVICE_COMMAND_UNSUBSCRIBE_INTERNAL)
378 unique_ptr<Integer> pid(new (nothrow) Integer(__currentPid));
380 SysTryCatch(NID_SYS, __eventListForInternal.Contains(*(pid.get())) == true, r = E_OBJ_NOT_FOUND, r, "Required application(%ls, %d) is not subscribe event.", __currentPkgId.GetPointer(), __currentPid);
381 r = __eventListForInternal.Remove(*(pid.get()), true);
382 SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_SYSTEM, r, "It is failed to remove application(%ls, %d) on event list", __currentPkgId.GetPointer(), __currentPid);
393 String* pCommandCode = new (nothrow) String(*pCommand);
394 String* pResultCode = new (nothrow) String(GetErrorMessage(r));
396 SysLog(NID_SYS, "Command Code is %ls.", pCommandCode->GetPointer());
397 SysLog(NID_SYS, "Result Code is %ls.", pResultCode->GetPointer());
399 response->Add(pCommandCode);
400 response->Add(pResultCode);
403 SysLog(NID_SYS, "Value is %ls.", pValue->GetPointer());
404 response->Add(pValue);
407 __responseMessage.AddItems(*response);
411 SysLog(NID_SYS, "response is empty.");
418 _SettingService::OnResultReceivedForSetValueAsync(const String& key, result rCode)
420 SysLog(NID_SYS, "Key is %ls, result is %s.", key.GetPointer(), GetErrorMessage(rCode));
421 Integer* pid = (Integer*) __asyncList.GetValue(key);
422 ArrayList* pData = null;
423 result r = E_SUCCESS;
424 String cmdCode(SETTING_SERVICE_COMMAND_RESULT);
428 SysTryCatch(NID_SYS, pid != null, r = E_SYSTEM, r, "Required key(%ls) is not reserved.", key.GetPointer());
429 pData = new (nothrow) ArrayList;
432 resultCode.Append(GetErrorMessage(rCode));
435 pData->Add(resultCode);
437 r = __ipcServer.SendResponse(pid->value, new (nothrow) IoService_Data(*pData));
438 SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_SYSTEM, r, "It is failed to send result to %d.", pid->value);
441 __asyncList.Remove(key, true);
450 _SettingService::OnSettingChanged(Tizen::Base::String& key)
452 result r = E_SUCCESS;
453 IEnumerator* pEnum = null;
455 if(key == _SETTINGS_KEY_FONT_SIZE || key == _SETTINGS_KEY_FONT_TYPE
456 || key == _SETTINGS_KEY_LOCALE_COUNTRY || key == _SETTINGS_KEY_LOCALE_LANGUAGE)
458 pEnum = __eventListForInternal.GetEnumeratorN();
460 while(pEnum->MoveNext() == E_SUCCESS)
462 Integer* pid = (Integer*) pEnum->GetCurrent();
466 String cmdCode(SETTING_SERVICE_COMMAND_EVENT_INTERNAL);
471 r = __ipcServer.SendResponse(pid->value, new (nothrow) IoService_Data(data));
472 SysLog(NID_SYS, "Internal setting event is delivered to %d. result is %s.", pid->value, GetErrorMessage(r));
477 pEnum = __eventList.GetEnumeratorN();
478 while(pEnum->MoveNext() == E_SUCCESS)
480 Integer* pid = (Integer*) pEnum->GetCurrent();
484 String cmdCode(SETTING_SERVICE_COMMAND_EVENT);
489 r = __ipcServer.SendResponse(pid->value, new (nothrow) IoService_Data(data));
490 SysLog(NID_SYS, "Setting event is delivered to %d. result is %s.", pid->value, GetErrorMessage(r));
497 _SettingService::OnIpcServerStarted(const _IpcServer& server)
502 _SettingService::OnIpcServerStopped(const _IpcServer& server)
507 _SettingService::OnIpcClientConnected(const _IpcServer& server, int clientId)
512 _SettingService::OnIpcClientDisconnected(const _IpcServer&server, int clientId)
517 _SettingService::OnApplicationLaunched(const AppId& appId, int pid)
522 _SettingService::OnApplicationTerminated(const AppId& appId, int pid)
524 Integer reservedKey(pid);
525 result r = __eventList.Remove(reservedKey, true);
526 SysLog(NID_SYS, "Application(%d) is terminated and unsubscribe result is %s.", pid, GetErrorMessage(r));
527 r = __eventListForInternal.Remove(reservedKey, true);
528 SysLog(NID_SYS, "unsubscribe result is %s on internal event.", GetErrorMessage(r));
532 _SettingService::DestroySingleton(void)
534 delete __pSettingService;
535 __pSettingService = null;