#include <aul_svc.h>
#include <aul_app_com.h>
#include <aul_widget.h>
+#include <aul_debug_info.h>
#include <widget_service.h>
#include <widget_service_internal.h>
#include <bundle_internal.h>
};
struct _sdk_util {
- char *name;
- char **args;
- int argc;
- char *caller;
+ bool initialized;
+ bundle *b;
};
static GList *_widget_instances = NULL;
};
static int __fault_handler(int pid);
-static void __free_sdk_util(void);
extern int widget_service_get_update_period(const char *widget_id, double *period);
return -1;
}
- b = bundle_create();
- if (b == NULL) {
- _E("out of memory");
- return -1;
+ if (sdk_util.b) {
+ b = sdk_util.b;
+ sdk_util.b = NULL;
+ } else {
+ b = bundle_create();
+ if (b == NULL) {
+ _E("out of memory");
+ return -1;
+ }
}
snprintf(pid_buf, sizeof(pid_buf), "%d", getpid());
bundle_add_str(b, WIDGET_K_OPERATION, "create");
bundle_add_byte(b, WIDGET_K_PERIOD, &(instance->period), sizeof(double));
- if (sdk_util.name) {
- bundle_add_str(b, AUL_K_SDK, sdk_util.name);
- if (sdk_util.caller)
- bundle_add_str(b, AUL_K_ORG_CALLER_PID, sdk_util.caller);
- if (strcmp(sdk_util.name, SDK_DEBUG) == 0) {
- if (sdk_util.args) {
- bundle_add_str_array(b, DLP_K_DEBUG_ARG,
- (const char **)sdk_util.args, sdk_util.argc);
- }
- } else if (strcmp(sdk_util.name, SDK_VALGRIND) == 0) {
- if (sdk_util.args) {
- bundle_add_str_array(b, DLP_K_VALGRIND_ARG,
- (const char **)sdk_util.args, sdk_util.argc);
- }
- }
- __free_sdk_util();
- }
-
if (content_info) {
bundle_add_str(b, WIDGET_K_CONTENT_INFO, content_info);
instance->content_info = strdup(content_info);
EAPI int widget_instance_fini()
{
+ if (sdk_util.initialized) {
+ aul_debug_info_fini();
+ sdk_util.initialized = false;
+ }
+
+ if (sdk_util.b) {
+ bundle_free(sdk_util.b);
+ sdk_util.b = NULL;
+ }
+
if (lifecycle_tbl) {
g_hash_table_destroy(lifecycle_tbl);
lifecycle_tbl = NULL;
return 0;
}
-static void __free_sdk_util(void)
-{
- int i;
-
- if (sdk_util.caller) {
- free(sdk_util.caller);
- sdk_util.caller = NULL;
- }
-
- if (sdk_util.args) {
- for (i = 0; i < sdk_util.argc; i++) {
- if (sdk_util.args[i])
- free(sdk_util.args[i]);
- }
- free(sdk_util.args);
- sdk_util.args = NULL;
- sdk_util.argc = 0;
- }
-
- if (sdk_util.name) {
- free(sdk_util.name);
- sdk_util.name = NULL;
- }
-}
-
EAPI int widget_service_set_sdk_util(bundle *data)
{
- const char *caller_pid;
- const char *util;
- const char *util_arg = NULL;
- const char **util_arg_array = NULL;
- int len = 0;
- int ret;
- int i;
-
- __free_sdk_util();
-
- caller_pid = bundle_get_val(data, AUL_K_ORG_CALLER_PID);
- if (caller_pid == NULL)
- caller_pid = bundle_get_val(data, AUL_K_CALLER_PID);
+ const char *val;
+ int r;
- util = bundle_get_val(data, AUL_K_SDK);
- if (util == NULL)
+ val = bundle_get_val(data, AUL_K_SDK);
+ if (val == NULL)
return -1;
- sdk_util.name = strdup(util);
- if (sdk_util.name == NULL) {
- _E("out of memory"); /* LCOV_EXCL_LINE */
- return -1; /* LCOV_EXCL_LINE */
- }
-
- if (strcmp(util, SDK_DEBUG) == 0) {
- ret = bundle_get_type(data, DLP_K_DEBUG_ARG);
- if (ret == BUNDLE_TYPE_STR_ARRAY) {
- util_arg_array = bundle_get_str_array(data,
- DLP_K_DEBUG_ARG, &len);
- } else if (ret == BUNDLE_TYPE_STR) {
- util_arg = bundle_get_val(data, DLP_K_DEBUG_ARG);
- if (util_arg) {
- util_arg_array = &util_arg;
- len = 1;
- }
- }
- } else if (strcmp(util, SDK_VALGRIND) == 0) {
- ret = bundle_get_type(data, DLP_K_VALGRIND_ARG);
- if (ret == BUNDLE_TYPE_STR_ARRAY) {
- util_arg_array = bundle_get_str_array(data,
- DLP_K_VALGRIND_ARG, &len);
- } else if (ret == BUNDLE_TYPE_STR) {
- util_arg = bundle_get_val(data, DLP_K_VALGRIND_ARG);
- if (util_arg) {
- util_arg_array = &util_arg;
- len = 1;
- }
+ if (!sdk_util.initialized) {
+ r = aul_debug_info_init();
+ if (r != AUL_R_OK) {
+ _E("Failed to initialize debug info");
+ return -1;
}
}
- if (util_arg_array) {
- sdk_util.argc = len;
- sdk_util.args = calloc(len + 1, sizeof(char *));
- if (sdk_util.args == NULL) {
- _E("out of memory"); /* LCOV_EXCL_LINE */
- __free_sdk_util(); /* LCOV_EXCL_LINE */
- return -1; /* LCOV_EXCL_LINE */
- }
+ if (sdk_util.b)
+ bundle_free(sdk_util.b);
- for (i = 0; i < len; i++) {
- sdk_util.args[i] = strdup(util_arg_array[i]);
- if (sdk_util.args[i] == NULL) {
- _E("out of memory"); /* LCOV_EXCL_LINE */
- __free_sdk_util(); /* LCOV_EXCL_LINE */
- return -1; /* LCOV_EXCL_LINE */
- }
- }
+ sdk_util.b = bundle_create();
+ if (sdk_util.b == NULL) {
+ _E("Failed to create bundle");
+ return -1;
}
- if (caller_pid) {
- sdk_util.caller = strdup(caller_pid);
- if (sdk_util.caller == NULL) {
- _E("out of memory"); /* LCOV_EXCL_LINE */
- __free_sdk_util(); /* LCOV_EXCL_LINE */
- return -1; /* LCOV_EXCL_LINE */
- }
+ r = aul_debug_info_set(data, sdk_util.b);
+ if (r != AUL_R_OK) {
+ _E("Failed to set debug info");
+ bundle_free(sdk_util.b);
+ sdk_util.b = NULL;
+ return -1;
}
return 0;