Index: apps/app_queue.c =================================================================== --- apps/app_queue.c (revision 101767) +++ apps/app_queue.c (working copy) @@ -340,6 +340,7 @@ time_t lastcall; /*!< When last successful call was hungup */ unsigned int dead:1; /*!< Used to detect members deleted in realtime */ unsigned int delme:1; /*!< Flag to delete entry on reload */ + char rt_uniqueid[80]; /*!< Unique id of realtime member entry */ }; struct member_interface { @@ -1072,7 +1073,7 @@ } } -static void rt_handle_member_record(struct call_queue *q, char *interface, const char *membername, const char *penalty_str, const char *paused_str) +static void rt_handle_member_record(struct call_queue *q, char *interface, const char *rt_uniqueid, const char *membername, const char *penalty_str, const char *paused_str) { struct member *m, tmpmem; int penalty = 0; @@ -1099,6 +1100,7 @@ if ((m = create_queue_member(interface, membername, penalty, paused))) { m->dead = 0; m->realtime = 1; + ast_copy_string(m->rt_uniqueid, rt_uniqueid, sizeof(m->rt_uniqueid)); add_to_interfaces(interface); ao2_link(q->members, m); ao2_ref(m, -1); @@ -1236,6 +1238,7 @@ while ((interface = ast_category_browse(member_config, interface))) { rt_handle_member_record(q, interface, + ast_variable_retrieve(member_config, interface, "uniqueid"), ast_variable_retrieve(member_config, interface, "membername"), ast_variable_retrieve(member_config, interface, "penalty"), ast_variable_retrieve(member_config, interface, "paused")); @@ -1261,20 +1264,14 @@ static int update_realtime_member_field(struct member *mem, const char *queue_name, const char *field, const char *value) { - struct ast_variable *var; int ret = -1; - if (!(var = ast_load_realtime("queue_members", "interface", mem->interface, "queue_name", queue_name, NULL))) + if (ast_strlen_zero(mem->rt_uniqueid)) return ret; - while (var) { - if (!strcmp(var->name, "uniqueid")) - break; - var = var->next; - } - if (var && !ast_strlen_zero(var->value)) { - if ((ast_update_realtime("queue_members", "uniqueid", var->value, field, value, NULL)) > -1) - ret = 0; - } + + if ((ast_update_realtime("queue_members", "uniqueid", mem->rt_uniqueid, field, value, NULL)) > -1) + ret = 0; + return ret; } @@ -1304,6 +1301,7 @@ while ((interface = ast_category_browse(member_config, interface))) { rt_handle_member_record(q, interface, + ast_variable_retrieve(member_config, interface, "uniqueid"), S_OR(ast_variable_retrieve(member_config, interface, "membername"), interface), ast_variable_retrieve(member_config, interface, "penalty"), ast_variable_retrieve(member_config, interface, "paused"));