extern int lb_system_event(const char *pkgname, const char *id, int event);
extern int lb_system_event_all(int event);
-extern int lb_open_pd(const char *pkgname);
-extern int lb_close_pd(const char *pkgname);
+extern int lb_open_pd(const char *pkgname, const char *id);
+extern int lb_close_pd(const char *pkgname, const char *id);
extern int lb_pause(const char *pkgname, const char *id);
extern int lb_resume(const char *pkgname, const char *id);
{
int ret;
- ret = lb_open_pd(arg->pkgname);
- DbgPrint("%s Open PD: %d\n", arg->pkgname, ret);
+ ret = lb_open_pd(arg->pkgname, arg->id);
+ DbgPrint("%s Open PD: %d\n", arg->id, ret);
return LB_STATUS_SUCCESS;
}
{
int ret;
- ret = lb_close_pd(arg->pkgname);
- DbgPrint("%s Close PD: %d\n", arg->pkgname, ret);
+ ret = lb_close_pd(arg->pkgname, arg->id);
+ DbgPrint("%s Close PD: %d\n", arg->id, ret);
return LB_STATUS_SUCCESS;
}
{
int i;
Eina_List *l;
- char *tmp;
+ struct instance *inst;
i = 0;
- EINA_LIST_FOREACH(s_info.pd_list, l, tmp) {
- if (pkgname && !strcmp(pkgname, tmp)) {
+ EINA_LIST_FOREACH(s_info.pd_list, l, inst) {
+ if (pkgname && !strcmp(pkgname, inst->item->pkgname)) {
return 1;
}
return ret;
}
-HAPI int lb_open_pd(const char *pkgname)
+HAPI int lb_open_pd(const char *pkgname, const char *id)
{
+ struct instance *inst;
+ struct instance *tmp;
Eina_List *l;
- char *tmp;
+
+ inst = so_find_instance(pkgname, id);
+ if (!inst) {
+ ErrPrint("Instance is not found\n");
+ return LB_STATUS_ERROR_NOT_EXIST;
+ }
EINA_LIST_FOREACH(s_info.pd_list, l, tmp) {
- if (!strcmp(pkgname, tmp)) {
+ if (tmp == inst) {
return 0;
}
}
- tmp = strdup(pkgname);
- if (!tmp) {
- ErrPrint("Heap: %s\n", strerror(errno));
- return LB_STATUS_ERROR_MEMORY;
- }
-
if (!s_info.pd_list) {
pending_timer_freeze();
}
- s_info.pd_list = eina_list_append(s_info.pd_list, tmp);
+ s_info.pd_list = eina_list_append(s_info.pd_list, inst);
/*!
* Find all instances from the pending list.
return LB_STATUS_SUCCESS;
}
-HAPI int lb_close_pd(const char *pkgname)
+HAPI int lb_close_pd(const char *pkgname, const char *id)
{
Eina_List *l;
Eina_List *n;
- char *tmp;
+ struct instance *tmp;
+ struct instance *inst;
+
+ inst = so_find_instance(pkgname, id);
+ if (!inst) {
+ ErrPrint("Insatnce is not found\n");
+ return LB_STATUS_ERROR_NOT_EXIST;
+ }
EINA_LIST_FOREACH_SAFE(s_info.pd_list, l, n, tmp) {
- if (strcmp(tmp, pkgname)) {
+ if (tmp != inst) {
continue;
}
s_info.pd_list = eina_list_remove(s_info.pd_list, tmp);
- free(tmp);
-
if (!s_info.pd_list) {
pending_timer_thaw();
}
HAPI int lb_destroy(const char *pkgname, const char *id)
{
Eina_List *l;
+ Eina_List *n;
struct instance *inst;
+ struct instance *tmp;
struct item *item;
inst = so_find_instance(pkgname, id);
return LB_STATUS_ERROR_INVALID;
}
+ EINA_LIST_FOREACH_SAFE(s_info.pd_list, l, n, tmp) {
+ if (tmp != inst) {
+ continue;
+ }
+
+ s_info.pd_list = eina_list_remove(s_info.pd_list, tmp);
+ if (!s_info.pd_list) {
+ pending_timer_thaw();
+ }
+
+ /*!
+ * Move all items in pd_open_pending_list
+ * to pending_list.
+ */
+ migrate_to_pending_list(pkgname);
+ break;
+ }
+
l = find_item(inst);
if (!l) {
ErrPrint("Instance is not found (%s - %s)\n", pkgname, id);