Merge pull request #491 from lunixbochs/hook-fix

hook management fixes
This commit is contained in:
Nguyen Anh Quynh 2016-03-27 08:46:53 +07:00
commit 5a2ca8e72e
2 changed files with 13 additions and 7 deletions

2
list.c
View file

@ -54,6 +54,8 @@ bool list_remove(struct list *list, void *data)
if (cur->data == data) {
if (cur == list->head) {
list->head = next;
} else {
prev->next = next;
}
if (cur == list->tail) {
list->tail = prev;

18
uc.c
View file

@ -1029,15 +1029,19 @@ uc_err uc_hook_add(uc_engine *uc, uc_hook *hh, int type, void *callback,
UNICORN_EXPORT
uc_err uc_hook_del(uc_engine *uc, uc_hook hh)
{
int i;
struct hook *hook;
for (i = 0; i < UC_HOOK_MAX; i++) {
if (list_remove(&uc->hook[i], (void *)hh)) {
hook = (struct hook *)hh;
if (--hook->refs == 0) {
free(hook);
int i = 0;
struct hook *hook = (struct hook *)hh;
int type = hook->type;
while ((type >> i) > 0 && i < UC_HOOK_MAX) {
if ((type >> i) & 1) {
if (list_remove(&uc->hook[i], (void *)hh)) {
if (--hook->refs == 0) {
free(hook);
}
}
}
i++;
}
return UC_ERR_OK;
}