summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/app_meetme.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/apps/app_meetme.c b/apps/app_meetme.c
index 0ff035afc..def1e74f1 100644
--- a/apps/app_meetme.c
+++ b/apps/app_meetme.c
@@ -6447,8 +6447,8 @@ static void sla_check_reload(void)
struct sla_station *station;
struct sla_trunk *trunk;
- if (!AST_LIST_EMPTY(&sla.event_q) || !AST_LIST_EMPTY(&sla.ringing_trunks)
- || !AST_LIST_EMPTY(&sla.ringing_stations)) {
+ if (!AST_LIST_EMPTY(&sla.event_q) || !AST_LIST_EMPTY(&sla.ringing_trunks)
+ || !AST_LIST_EMPTY(&sla.ringing_stations) || !AST_LIST_EMPTY(&sla.failed_stations)) {
return;
}
@@ -6464,8 +6464,9 @@ static void sla_check_reload(void)
AST_RWLIST_RDLOCK(&sla_trunks);
AST_RWLIST_TRAVERSE(&sla_trunks, trunk, entry) {
- if (trunk->ref_count)
+ if (trunk->ref_count || trunk->chan || trunk->active_stations || trunk->hold_stations) {
break;
+ }
}
AST_RWLIST_UNLOCK(&sla_trunks);
if (trunk) {
@@ -6718,7 +6719,7 @@ static int sla_station_exec(struct ast_channel *chan, const char *data)
return 0;
}
- AST_RWLIST_RDLOCK(&sla_stations);
+ AST_RWLIST_WRLOCK(&sla_stations);
station = sla_find_station(station_name);
if (station)
ast_atomic_fetchadd_int((int *) &station->ref_count, 1);
@@ -6930,7 +6931,7 @@ static int sla_trunk_exec(struct ast_channel *chan, const char *data)
}
}
- AST_RWLIST_RDLOCK(&sla_trunks);
+ AST_RWLIST_WRLOCK(&sla_trunks);
trunk = sla_find_trunk(args.trunk_name);
if (trunk)
ast_atomic_fetchadd_int((int *) &trunk->ref_count, 1);