--- asterisk-1.4.31/apps/app_meetme.c 2010-02-22 13:52:34.000000000 +0000 +++ asterisk-1.4.31.meetme-fix/apps/app_meetme.c 2010-05-24 23:04:25.000000000 +0100 @@ -1313,17 +1313,21 @@ return 0; } -static void conf_queue_dtmf(const struct ast_conference *conf, +static void conf_queue_dtmf(struct ast_conference *conf, const struct ast_conf_user *sender, struct ast_frame *f) { struct ast_conf_user *user; + ast_mutex_lock(&conf->playlock); + AST_LIST_TRAVERSE(&conf->userlist, user, list) { if (user == sender) continue; if (ast_write(user->chan, f) < 0) ast_log(LOG_WARNING, "Error writing frame to channel %s\n", user->chan->name); } + + ast_mutex_unlock(&conf->playlock); } static void sla_queue_event_full(enum sla_event_type type, @@ -2487,9 +2491,14 @@ if (confflags & CONFFLAG_MARKEDUSER) conf->markedusers--; } + /* Remove ourselves from the list */ + ast_mutex_lock(&conf->playlock); + AST_LIST_REMOVE(&conf->userlist, user, list); + ast_mutex_unlock(&conf->playlock); + /* Change any states */ if (!conf->users) ast_device_state_changed("meetme:%s", conf->confno);