Hello,

On Thu, Mar 10, 2011 at 01:59:30PM +0800, xiaoxin wrote:
> Hello:
>        I am try to delete the proxy because some task. and reload the new 
> proxy. and then use check_config_validity.
>        but I get the problem that 
>        I use  the fallowing code in delete_proxy() (custom function)
> 
>                              /* p = proxy */
>        786                 if (!p->uuid){
>       787                         eb32_delete(&p->conf.id);
>       788                 }
>          
>        I clear all the proxy, but when i use
>  
>       next_pxid = get_next_id(&used_proxy_id, next_pxid);
> 
>       I get "segment fault". 
>       I thought the whole tree should be empty, but not. why? 

I don't know what your whole function does, but I suspect the following is
happening :

  - your proxy has a valid p->uuid 
  - line 787 does not delete it from the tree
  - after that you delete and free all the proxy contents
  - later on, get_next_id() walks the ID tree and at one point it
    encounters the node that you freed without deleting it and
    since the memory is not allocated anymore, the process crashes.


>       Am I using the right eb tree api?

Yes, in order to delete a node from a tree, ebXX_delete(&node) is the
way to do it. You did it right, reason why I think the scenario above
happened.

Try to comment out lines 786 and 788 in order to unconditionally remove
the id from the tree. I'm sure it will not crash anymore.

Regards,
Willy


Reply via email to