2 * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd All Rights Reserved
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 * http://www.apache.org/licenses/LICENSE-2.0
7 * Unless required by applicable law or agreed to in writing, software
8 * distributed under the License is distributed on an "AS IS" BASIS,
9 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10 * See the License for the specific language governing permissions and
11 * limitations under the License.
17 #include <sys/types.h>
22 #include "stt_setting.h"
23 #include "stt_setting_dbus.h"
26 static int __check_setting_stt_daemon();
28 static bool g_is_daemon_started = false;
30 static stt_setting_state_e g_state = STT_SETTING_STATE_NONE;
32 static stt_setting_initialized_cb g_initialized_cb;
34 static void* g_user_data;
38 /* API Implementation */
39 static Eina_Bool __stt_setting_initialized(void *data)
41 g_initialized_cb(g_state, g_reason, g_user_data);
46 static Eina_Bool __stt_setting_connect_daemon(void *data)
49 if (0 != stt_setting_dbus_request_hello()) {
50 if (false == g_is_daemon_started) {
51 g_is_daemon_started = true;
52 __check_setting_stt_daemon();
57 SLOG(LOG_DEBUG, TAG_STTC, "===== Connect daemon");
59 /* do request initialize */
62 ret = stt_setting_dbus_request_initialize();
64 if (STT_SETTING_ERROR_ENGINE_NOT_FOUND == ret) {
65 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Engine not found");
66 } else if (STT_SETTING_ERROR_NONE != ret) {
67 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to connection : %d", ret);
69 /* success to connect stt-daemon */
70 g_state = STT_SETTING_STATE_READY;
75 ecore_timer_add(0, __stt_setting_initialized, NULL);
77 SLOG(LOG_DEBUG, TAG_STTC, "=====");
78 SLOG(LOG_DEBUG, TAG_STTC, " ");
83 int stt_setting_initialize ()
85 SLOG(LOG_DEBUG, TAG_STTC, "===== Initialize STT Setting");
88 if (STT_SETTING_STATE_READY == g_state) {
89 SLOG(LOG_WARN, TAG_STTC, "[WARNING] STT Setting has already been initialized. \n");
90 SLOG(LOG_DEBUG, TAG_STTC, "=====");
91 SLOG(LOG_DEBUG, TAG_STTC, " ");
92 return STT_SETTING_ERROR_NONE;
95 if (0 != stt_setting_dbus_open_connection()) {
96 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to open connection\n");
97 SLOG(LOG_DEBUG, TAG_STTC, "=====");
98 SLOG(LOG_DEBUG, TAG_STTC, " ");
99 return STT_SETTING_ERROR_OPERATION_FAILED;
103 if (0 != stt_setting_dbus_request_hello()) {
104 __check_setting_stt_daemon();
110 ret = stt_setting_dbus_request_initialize();
112 if (STT_SETTING_ERROR_ENGINE_NOT_FOUND == ret) {
113 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Engine not found");
118 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Connection Time out");
119 ret = STT_SETTING_ERROR_TIMED_OUT;
124 /* success to connect stt-daemon */
129 if (STT_SETTING_ERROR_NONE == ret) {
130 g_state = STT_SETTING_STATE_READY;
131 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Initialize");
134 SLOG(LOG_DEBUG, TAG_STTC, "=====");
135 SLOG(LOG_DEBUG, TAG_STTC, " ");
140 int stt_setting_initialize_async(stt_setting_initialized_cb callback, void* user_data)
142 SLOG(LOG_DEBUG, TAG_STTC, "===== Initialize STT Setting");
144 if (STT_SETTING_STATE_READY == g_state) {
145 SLOG(LOG_WARN, TAG_STTC, "[WARNING] STT Setting has already been initialized. \n");
146 SLOG(LOG_DEBUG, TAG_STTC, "=====");
147 SLOG(LOG_DEBUG, TAG_STTC, " ");
148 return STT_SETTING_ERROR_NONE;
151 if( 0 != stt_setting_dbus_open_connection() ) {
152 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to open connection\n ");
153 SLOG(LOG_DEBUG, TAG_STTC, "=====");
154 SLOG(LOG_DEBUG, TAG_STTC, " ");
155 return STT_SETTING_ERROR_OPERATION_FAILED;
158 g_initialized_cb = callback;
159 g_user_data = user_data;
161 ecore_timer_add(0, __stt_setting_connect_daemon, NULL);
163 SLOG(LOG_DEBUG, TAG_STTC, "=====");
164 SLOG(LOG_DEBUG, TAG_STTC, " ");
166 return STT_SETTING_ERROR_NONE;
169 int stt_setting_finalize ()
171 SLOG(LOG_DEBUG, TAG_STTC, "===== Finalize STT Setting");
175 if (STT_SETTING_STATE_NONE == g_state) {
176 SLOG(LOG_WARN, TAG_STTC, "[WARNING] Not initialized");
177 SLOG(LOG_DEBUG, TAG_STTC, "=====");
178 SLOG(LOG_DEBUG, TAG_STTC, " ");
179 return STT_SETTING_ERROR_INVALID_STATE;
182 ret = stt_setting_dbus_request_finalilze();
184 SLOG(LOG_ERROR, TAG_STTC, "Fail : finialize(%d)", ret);
185 SLOG(LOG_DEBUG, TAG_STTC, "=====");
186 SLOG(LOG_DEBUG, TAG_STTC, " ");
190 if (0 != stt_setting_dbus_close_connection()) {
191 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to close connection");
193 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Finalize");
196 g_state = STT_SETTING_STATE_NONE;
198 SLOG(LOG_DEBUG, TAG_STTC, "=====");
199 SLOG(LOG_DEBUG, TAG_STTC, " ");
201 return STT_SETTING_ERROR_NONE;
204 int stt_setting_foreach_supported_engines(stt_setting_supported_engine_cb callback, void* user_data)
206 SLOG(LOG_DEBUG, TAG_STTC, "===== Foreach supported engines");
208 if (STT_SETTING_STATE_NONE == g_state) {
209 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
210 SLOG(LOG_DEBUG, TAG_STTC, "=====");
211 SLOG(LOG_DEBUG, TAG_STTC, " ");
212 return STT_SETTING_ERROR_INVALID_STATE;
215 if (NULL == callback) {
216 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Callback is NULL");
217 SLOG(LOG_DEBUG, TAG_STTC, "=====");
218 SLOG(LOG_DEBUG, TAG_STTC, " ");
219 return STT_SETTING_ERROR_INVALID_PARAMETER;
222 int ret = stt_setting_dbus_request_get_engine_list(callback, user_data);
224 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
226 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Foreach supported engines");
229 SLOG(LOG_DEBUG, TAG_STTC, "=====");
230 SLOG(LOG_DEBUG, TAG_STTC, " ");
235 int stt_setting_get_engine(char** engine_id)
237 SLOG(LOG_DEBUG, TAG_STTC, "===== Get current engine");
239 if (STT_SETTING_STATE_NONE == g_state) {
240 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
241 SLOG(LOG_DEBUG, TAG_STTC, "=====");
242 SLOG(LOG_DEBUG, TAG_STTC, " ");
243 return STT_SETTING_ERROR_INVALID_STATE;
246 if (NULL == engine_id) {
247 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Engine id is NULL");
248 SLOG(LOG_DEBUG, TAG_STTC, "=====");
249 SLOG(LOG_DEBUG, TAG_STTC, " ");
250 return STT_SETTING_ERROR_INVALID_PARAMETER;
253 int ret = stt_setting_dbus_request_get_engine(engine_id);
255 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
257 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Get current engine");
260 SLOG(LOG_DEBUG, TAG_STTC, "=====");
261 SLOG(LOG_DEBUG, TAG_STTC, " ");
266 int stt_setting_set_engine(const char* engine_id)
268 SLOG(LOG_DEBUG, TAG_STTC, "===== Set current engine");
270 if (STT_SETTING_STATE_NONE == g_state) {
271 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
272 SLOG(LOG_DEBUG, TAG_STTC, "=====");
273 SLOG(LOG_DEBUG, TAG_STTC, " ");
274 return STT_SETTING_ERROR_INVALID_STATE;
277 if (NULL == engine_id) {
278 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Engine id is NULL");
279 SLOG(LOG_DEBUG, TAG_STTC, "=====");
280 SLOG(LOG_DEBUG, TAG_STTC, " ");
281 return STT_SETTING_ERROR_INVALID_PARAMETER;
284 int ret = stt_setting_dbus_request_set_engine(engine_id);
286 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
288 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set current engine");
291 SLOG(LOG_DEBUG, TAG_STTC, "=====");
292 SLOG(LOG_DEBUG, TAG_STTC, " ");
297 int stt_setting_foreach_supported_languages(stt_setting_supported_language_cb callback, void* user_data)
299 SLOG(LOG_DEBUG, TAG_STTC, "===== Foreach supported languages");
301 if (STT_SETTING_STATE_NONE == g_state) {
302 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
303 SLOG(LOG_DEBUG, TAG_STTC, "=====");
304 SLOG(LOG_DEBUG, TAG_STTC, " ");
305 return STT_SETTING_ERROR_INVALID_STATE;
308 if (NULL == callback) {
309 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Param is NULL");
310 SLOG(LOG_DEBUG, TAG_STTC, "=====");
311 SLOG(LOG_DEBUG, TAG_STTC, " ");
312 return STT_SETTING_ERROR_INVALID_PARAMETER;
315 int ret = stt_setting_dbus_request_get_language_list(callback, user_data);
318 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
320 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Foreach supported languages");
323 SLOG(LOG_DEBUG, TAG_STTC, "=====");
324 SLOG(LOG_DEBUG, TAG_STTC, " ");
329 int stt_setting_get_default_language(char** language)
331 SLOG(LOG_DEBUG, TAG_STTC, "===== Get default language");
333 if (STT_SETTING_STATE_NONE == g_state) {
334 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
335 SLOG(LOG_DEBUG, TAG_STTC, "=====");
336 SLOG(LOG_DEBUG, TAG_STTC, " ");
337 return STT_SETTING_ERROR_INVALID_STATE;
340 if (NULL == language) {
341 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Input parameter is NULL");
342 SLOG(LOG_DEBUG, TAG_STTC, "=====");
343 SLOG(LOG_DEBUG, TAG_STTC, " ");
344 return STT_SETTING_ERROR_INVALID_PARAMETER;
347 int ret = stt_setting_dbus_request_get_default_language(language);
349 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
351 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Foreach supported voices");
354 SLOG(LOG_DEBUG, TAG_STTC, "=====");
355 SLOG(LOG_DEBUG, TAG_STTC, " ");
360 int stt_setting_set_default_language(const char* language)
362 SLOG(LOG_DEBUG, TAG_STTC, "===== Set default language");
364 if (STT_SETTING_STATE_NONE == g_state) {
365 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
366 SLOG(LOG_DEBUG, TAG_STTC, "=====");
367 SLOG(LOG_DEBUG, TAG_STTC, " ");
368 return STT_SETTING_ERROR_INVALID_STATE;
371 if (NULL == language) {
372 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Input parameter is NULL");
373 SLOG(LOG_DEBUG, TAG_STTC, "=====");
374 SLOG(LOG_DEBUG, TAG_STTC, " ");
375 return STT_SETTING_ERROR_INVALID_PARAMETER;
378 int ret = stt_setting_dbus_request_set_default_language(language);
380 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result : %d", ret);
382 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set default voice");
385 SLOG(LOG_DEBUG, TAG_STTC, "=====");
386 SLOG(LOG_DEBUG, TAG_STTC, " ");
391 int stt_setting_get_profanity_filter(bool* value)
393 SLOG(LOG_DEBUG, TAG_STTC, "===== Get profanity filter");
397 if (STT_SETTING_STATE_NONE == g_state) {
398 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Not initialized");
399 SLOG(LOG_DEBUG, TAG_STTC, "=====");
400 SLOG(LOG_DEBUG, TAG_STTC, " ");
401 return STT_SETTING_ERROR_INVALID_STATE;
405 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Input parameter is NULL");
406 SLOG(LOG_DEBUG, TAG_STTC, "=====");
407 SLOG(LOG_DEBUG, TAG_STTC, " ");
408 return STT_SETTING_ERROR_INVALID_PARAMETER;
411 ret = stt_setting_dbus_request_get_profanity_filter(value);
413 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret);
415 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Get profanity filter(%s)", *value ? "true":"false");
418 SLOG(LOG_DEBUG, TAG_STTC, "=====");
419 SLOG(LOG_DEBUG, TAG_STTC, " ");
424 int stt_setting_set_profanity_filter(const bool value)
426 SLOG(LOG_DEBUG, TAG_STTC, "===== Set profanity filter");
430 if (STT_SETTING_STATE_NONE == g_state) {
431 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] not initialized");
432 SLOG(LOG_DEBUG, TAG_STTC, "=====");
433 SLOG(LOG_DEBUG, TAG_STTC, " ");
434 return STT_SETTING_ERROR_INVALID_STATE;
437 ret = stt_setting_dbus_request_set_profanity_filter(value);
439 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret);
441 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set profanity filter(%s)", value ? "true":"false");
444 SLOG(LOG_DEBUG, TAG_STTC, "=====");
445 SLOG(LOG_DEBUG, TAG_STTC, " ");
450 int stt_setting_get_punctuation_override(bool* value)
452 SLOG(LOG_DEBUG, TAG_STTC, "===== Get punctuation override");
456 if (STT_SETTING_STATE_NONE == g_state) {
457 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] not initialized");
458 SLOG(LOG_DEBUG, TAG_STTC, "=====");
459 SLOG(LOG_DEBUG, TAG_STTC, " ");
460 return STT_SETTING_ERROR_INVALID_STATE;
464 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] param is NULL");
465 SLOG(LOG_DEBUG, TAG_STTC, "=====");
466 SLOG(LOG_DEBUG, TAG_STTC, " ");
467 return STT_SETTING_ERROR_INVALID_PARAMETER;
470 ret = stt_setting_dbus_request_get_punctuation_override(value);
472 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret);
474 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Get punctuation override(%s)", *value ? "true":"false");
477 SLOG(LOG_DEBUG, TAG_STTC, "=====");
478 SLOG(LOG_DEBUG, TAG_STTC, " ");
483 int stt_setting_set_punctuation_override(bool value)
485 SLOG(LOG_DEBUG, TAG_STTC, "===== Set punctuation override");
489 if (STT_SETTING_STATE_NONE == g_state) {
490 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] not initialized");
491 SLOG(LOG_DEBUG, TAG_STTC, "=====");
492 SLOG(LOG_DEBUG, TAG_STTC, " ");
493 return STT_SETTING_ERROR_INVALID_STATE;
496 ret = stt_setting_dbus_request_set_punctuation_override(value);
498 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret);
500 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set punctuation override(%s)", value ? "true":"false");
503 SLOG(LOG_DEBUG, TAG_STTC, "=====");
504 SLOG(LOG_DEBUG, TAG_STTC, " ");
509 int stt_setting_get_silence_detection(bool* value)
511 SLOG(LOG_DEBUG, TAG_STTC, "===== Get silence detection");
515 if (STT_SETTING_STATE_NONE == g_state) {
516 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] not initialized");
517 SLOG(LOG_DEBUG, TAG_STTC, "=====");
518 SLOG(LOG_DEBUG, TAG_STTC, " ");
519 return STT_SETTING_ERROR_INVALID_STATE;
523 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] param is NULL");
524 SLOG(LOG_DEBUG, TAG_STTC, "=====");
525 SLOG(LOG_DEBUG, TAG_STTC, " ");
526 return STT_SETTING_ERROR_INVALID_PARAMETER;
529 ret = stt_setting_dbus_request_get_silence_detection(value);
531 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret);
533 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Get silence detection(%s)", *value ? "true":"false");
536 SLOG(LOG_DEBUG, TAG_STTC, "=====");
537 SLOG(LOG_DEBUG, TAG_STTC, " ");
542 int stt_setting_set_silence_detection(bool value)
544 SLOG(LOG_DEBUG, TAG_STTC, "===== Set silence detection");
548 if (STT_SETTING_STATE_NONE == g_state) {
549 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] not initialized");
550 SLOG(LOG_DEBUG, TAG_STTC, "=====");
551 SLOG(LOG_DEBUG, TAG_STTC, " ");
552 return STT_SETTING_ERROR_INVALID_STATE;
555 ret = stt_setting_dbus_request_set_silence_detection(value);
557 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret);
559 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set silence detection(%s)", value ? "true":"false");
562 SLOG(LOG_DEBUG, TAG_STTC, "=====");
563 SLOG(LOG_DEBUG, TAG_STTC, " ");
568 int stt_setting_foreach_engine_settings(stt_setting_engine_setting_cb callback, void* user_data)
570 SLOG(LOG_DEBUG, TAG_STTC, "===== Foreach engine setting");
574 if (STT_SETTING_STATE_NONE == g_state) {
575 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] not initialized");
576 SLOG(LOG_DEBUG, TAG_STTC, "=====");
577 SLOG(LOG_DEBUG, TAG_STTC, " ");
578 return STT_SETTING_ERROR_INVALID_STATE;
581 if (NULL == callback) {
582 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] parameter is NULL");
583 SLOG(LOG_DEBUG, TAG_STTC, "=====");
584 SLOG(LOG_DEBUG, TAG_STTC, " ");
585 return STT_SETTING_ERROR_INVALID_PARAMETER;
588 ret = stt_setting_dbus_request_get_engine_setting(callback, user_data);
590 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret);
592 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Foreach engine setting");
595 SLOG(LOG_DEBUG, TAG_STTC, "=====");
596 SLOG(LOG_DEBUG, TAG_STTC, " ");
601 int stt_setting_set_engine_setting(const char* key, const char* value)
603 SLOG(LOG_DEBUG, TAG_STTC, "===== Set engine setting");
607 if (STT_SETTING_STATE_NONE == g_state) {
608 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] not initialized");
609 return STT_SETTING_ERROR_INVALID_STATE;
612 if (NULL == key || NULL == value) {
613 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] parameter is NULL");
614 return STT_SETTING_ERROR_INVALID_PARAMETER;
617 ret = stt_setting_dbus_request_set_engine_setting(key, value);
619 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Result (%d)", ret);
621 SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Set engine setting(%s)", *value ? "true":"false");
624 SLOG(LOG_DEBUG, TAG_STTC, "=====");
625 SLOG(LOG_DEBUG, TAG_STTC, " ");
630 int __setting_get_cmd_line(char *file, char *buf)
635 fp = fopen(file, "r");
637 SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Get command line");
648 static bool __stt_setting_is_alive()
651 struct dirent *entry;
652 struct stat filestat;
658 dir = opendir("/proc");
660 SLOG(LOG_ERROR, TAG_STTC, "process checking is FAILED");
664 while ((entry = readdir(dir)) != NULL) {
665 if (0 != lstat(entry->d_name, &filestat))
668 if (!S_ISDIR(filestat.st_mode))
671 pid = atoi(entry->d_name);
672 if (pid <= 0) continue;
674 sprintf(tempPath, "/proc/%d/cmdline", pid);
675 if (0 != __setting_get_cmd_line(tempPath, cmdLine)) {
679 if ( 0 == strncmp(cmdLine, "[stt-daemon]", strlen("[stt-daemon]")) ||
680 0 == strncmp(cmdLine, "stt-daemon", strlen("stt-daemon")) ||
681 0 == strncmp(cmdLine, "/usr/bin/stt-daemon", strlen("/usr/bin/stt-daemon"))) {
682 SLOG(LOG_DEBUG, TAG_STTC, "stt-daemon is ALIVE !! \n");
687 SLOG(LOG_DEBUG, TAG_STTC, "THERE IS NO stt-daemon !! \n");
694 static void __setting_my_sig_child(int signo, siginfo_t *info, void *data)
697 pid_t child_pid, child_pgid;
699 child_pgid = getpgid(info->si_pid);
700 SLOG(LOG_DEBUG, TAG_STTC, "Signal handler: dead pid = %d, pgid = %d\n", info->si_pid, child_pgid);
702 while ((child_pid = waitpid(-1, &status, WNOHANG)) > 0) {
703 if(child_pid == child_pgid)
704 killpg(child_pgid, SIGKILL);
710 int __check_setting_stt_daemon()
712 if (TRUE == __stt_setting_is_alive())
715 /* fork-exec stt-daemom */
717 struct sigaction act, dummy;
718 act.sa_handler = NULL;
719 act.sa_sigaction = __setting_my_sig_child;
720 sigemptyset(&act.sa_mask);
721 act.sa_flags = SA_NOCLDSTOP | SA_SIGINFO;
723 if (sigaction(SIGCHLD, &act, &dummy) < 0) {
724 SLOG(LOG_ERROR, TAG_STTC, "%s\n", "Cannot make a signal handler\n");
732 SLOG(LOG_DEBUG, TAG_STTC, "Fail to create stt-daemon");
737 for( i = 0 ; i < _NSIG ; i++ )
740 execl("/usr/bin/stt-daemon", "/usr/bin/stt-daemon", NULL);