Имеем проблему: если используем поле callbackextension в таблице Mysql и кол-во регистрации более 3-х, на меньшем не проявлялась, то при sip reload можем поиметь все регистрации со статусом Unregistered, помогает только рестарт * либо выгрузка/загрузка chan_sip.
Порывшись на просторах нашел вот это: https://issues.asterisk.org/jira/browse/ASTERISK-23789
на момент публикации еще открытый. Патч помогает, насколько он правильный судить не могу.
Update 10.01.2016Порывшись на просторах нашел вот это: https://issues.asterisk.org/jira/browse/ASTERISK-23789
на момент публикации еще открытый. Патч помогает, насколько он правильный судить не могу.
--- asterisk-12.2.0/channels/chan_sip.c 2014-04-21 17:02:00.000000000 -0400
+++ asterisk-12.2.0-modified/channels/chan_sip.c 2014-05-24 20:44:28.559519094 -0400
@@ -6566,8 +6566,12 @@
AST_SCHED_DEL(sched, reg->expire);
AST_SCHED_DEL(sched, reg->timeout);
+ if ((reg->;registryadded))
+ {
+ ast_atomic_fetchadd_int(&regobjs, -1);
+ }
+
ast_string_field_free_memory(reg);
- ast_atomic_fetchadd_int(&regobjs, -1);
ast_free(reg);
}
@@ -9556,6 +9560,7 @@
registry_unref(tmp, "throw away found registry");
} else {
ast_atomic_fetchadd_int(&regobjs, 1);
+ reg->;registryadded = 1;
ASTOBJ_CONTAINER_LINK(&regl, reg);
}
--- asterisk-12.2.0/channels/sip/include/sip.h 2014-04-21 17:02:00.000000000 -0400
+++ asterisk-12.2.0-modified/channels/sip/include/sip.h 2014-05-24 20:37:42.557555124 -0400
@@ -1414,6 +1414,7 @@
struct ast_sockaddr us; /*!< Who the server thinks we are */
int noncecount; /*!< Nonce-count */
char lastmsg[256]; /*!< Last Message sent/received */
+ unsigned short registryadded:1; /*!< If this registry object is already added to registry list */
};
struct tcptls_packet {
Порывшись еще найдено еще вот это: https://issues.asterisk.org/jira/browse/ASTERISK-23542
на момент публикации еще открытый.
--- channels/chan_sip.c (revision 420532)
+++ channels/chan_sip.c (working copy)
@@ -9218,11 +9218,12 @@
reg->refresh = reg->expiry = reg->configured_expiry = default_expiry;
}
+ ast_atomic_fetchadd_int(®objs, 1);
+
/* Add the new registry entry to the list, but only if it isn't already there */
if ((tmp = ASTOBJ_CONTAINER_FIND(®l, reg->name))) {
registry_unref(tmp, "throw away found registry");
} else {
- ast_atomic_fetchadd_int(®objs, 1);
ASTOBJ_CONTAINER_LINK(®l, reg);
}
Комментариев нет:
Отправить комментарий