I'm having a ZOMBIE problem coding with the ast_pickup_call function

channel.c line around 2818 CVS HEAD (now)

When a channel goes in the else statement it is marked ZOMBIE, ok...
where and when the ast_channel_free is supposed to be called in this case?
the channel is already fixed up so no pvt struct available.
I guess the channel will stay there as zombie because the ast_queue_frame(clone, &null_frame); function does not free up (or hangups) the channel when it is zombie
am I right?

   if (ast_test_flag(clone, AST_FLAG_ZOMBIE)) {
       ast_log(LOG_DEBUG, "Destroying channel clone '%s'\n", clone->name);
       ast_mutex_unlock(&clone->lock);
       ast_channel_free(clone);
       manager_event(EVENT_FLAG_CALL, "Hangup",
           "Channel: %s\r\n"
           "Uniqueid: %s\r\n"
           "Cause: %d\r\n"
           "Cause-txt: %s\r\n",
           clone->name,
           clone->uniqueid,
           clone->hangupcause,
           ast_cause2str(clone->hangupcause)
           );
   } else {
       struct ast_frame null_frame = { AST_FRAME_NULL, };
       ast_log(LOG_DEBUG, "Released clone lock on '%s'\n", clone->name);
       ast_set_flag(clone, AST_FLAG_ZOMBIE);
       ast_queue_frame(clone, &null_frame);
       ast_mutex_unlock(&clone->lock);
   }



_______________________________________________
Asterisk-Dev mailing list
Asterisk-Dev@lists.digium.com
http://lists.digium.com/mailman/listinfo/asterisk-dev
To UNSUBSCRIBE or update options visit:
  http://lists.digium.com/mailman/listinfo/asterisk-dev

Reply via email to