static int initialized = 0;
static int poll_outputfile = 0;
+static int is_gdbserver_launched;
void __set_oom();
void __set_env(app_info_from_db * menu_info, bundle * kb);
}
if(str_array == NULL) return 0;
+ is_gdbserver_launched = 0;
+ gdbserver_pid = -1;
+ gdbserver_app_pid = -1;
+
for (i = 0; i < len; i++) {
if(str_array[i] == NULL) break;
/* gdbserver */
}
__adjust_file_capability(PATH_GDBSERVER);
need_to_set_inh_cap_after_fork++;
+ is_gdbserver_launched++;
}
/* valgrind */
else if (strncmp(str_array[i], SDK_VALGRIND
exit(-1);
}
+ if(is_gdbserver_launched) {
+ char buf[MAX_LOCAL_BUFSZ];
+
+ usleep(100 * 1000); /* 100ms sleep */
+ snprintf(buf, MAX_LOCAL_BUFSZ, "%s.exe", app_path);
+ gdbserver_app_pid = __proc_iter_cmdline(NULL, buf);
+
+ if(gdbserver_app_pid == -1) {
+ _E("faild to get app pid");
+ } else {
+ gdbserver_pid = pid;
+ pid = gdbserver_app_pid;
+ }
+ }
+
_D("==> real launch pid : %d %s\n", pid, app_path);
is_real_launch = 1;
static struct sigaction old_sigchild;
static DBusConnection *bus = NULL;
sigset_t oldmask;
+static int gdbserver_pid;
+static int gdbserver_app_pid;
static inline void __socket_garbage_collector()
{
if (dead_pid <= 0)
goto end;
+ /* send app pid instead of gdbserver pid */
+ if(dead_pid == gdbserver_pid)
+ dead_pid = gdbserver_app_pid;
+
__send_app_dead_signal(dead_pid);
snprintf(buf, MAX_LOCAL_BUFSZ, "%s/%d", AUL_SOCK_PREFIX, dead_pid);