Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 350076
b: refs/heads/master
c: 04aab9b
h: refs/heads/master
v: v3
  • Loading branch information
Oleg Nesterov committed Feb 8, 2013
1 parent 1af2399 commit 50c6acc
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 15 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 63633cbf82840d972248f11d2122b261d0d4779a
refs/heads/master: 04aab9b2006bbdeff78dc162f206fdfebeca97d9
28 changes: 14 additions & 14 deletions trunk/kernel/events/uprobes.c
Original file line number Diff line number Diff line change
Expand Up @@ -825,12 +825,20 @@ static int __uprobe_register(struct uprobe *uprobe)
return register_for_each_vma(uprobe, true);
}

static void __uprobe_unregister(struct uprobe *uprobe)
static void __uprobe_unregister(struct uprobe *uprobe, struct uprobe_consumer *uc)
{
if (!register_for_each_vma(uprobe, false))
delete_uprobe(uprobe);
int err;

if (!consumer_del(uprobe, uc)) /* WARN? */
return;

/* TODO : cant unregister? schedule a worker thread */
err = register_for_each_vma(uprobe, false);
if (!uprobe->consumers) {
clear_bit(UPROBE_RUN_HANDLER, &uprobe->flags);
/* TODO : cant unregister? schedule a worker thread */
if (!err)
delete_uprobe(uprobe);
}
}

/*
Expand Down Expand Up @@ -868,8 +876,7 @@ int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *
} else if (!consumer_add(uprobe, uc)) {
ret = __uprobe_register(uprobe);
if (ret) {
uprobe->consumers = NULL;
__uprobe_unregister(uprobe);
__uprobe_unregister(uprobe, uc);
} else {
set_bit(UPROBE_RUN_HANDLER, &uprobe->flags);
}
Expand Down Expand Up @@ -897,14 +904,7 @@ void uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consume
return;

mutex_lock(uprobes_hash(inode));

if (consumer_del(uprobe, uc)) {
if (!uprobe->consumers) {
__uprobe_unregister(uprobe);
clear_bit(UPROBE_RUN_HANDLER, &uprobe->flags);
}
}

__uprobe_unregister(uprobe, uc);
mutex_unlock(uprobes_hash(inode));
put_uprobe(uprobe);
}
Expand Down

0 comments on commit 50c6acc

Please sign in to comment.