Improve sanity check for queue-push fail
This commit is contained in:
parent
ab81e38487
commit
bc180c3ffc
|
@ -68,9 +68,6 @@ void mme_event_free(mme_event_t *e);
|
|||
|
||||
void mme_event_timeout(void *data);
|
||||
|
||||
#define mme_event_send(__ptr_e) \
|
||||
ogs_assert(ogs_queue_push(mme_self()->queue, ((__ptr_e))) == OGS_OK)
|
||||
|
||||
const char *mme_event_get_name(mme_event_t *e);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -383,12 +383,19 @@ static void mme_s6a_aia_cb(void *data, struct msg **msg)
|
|||
out:
|
||||
if (!error)
|
||||
{
|
||||
int rv;
|
||||
e = mme_event_new(MME_EVT_S6A_MESSAGE);
|
||||
ogs_assert(e);
|
||||
e->mme_ue = mme_ue;
|
||||
e->pkbuf = s6abuf;
|
||||
mme_event_send(e);
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_error("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_pkbuf_free(e->pkbuf);
|
||||
mme_event_free(e);
|
||||
} else {
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
}
|
||||
}
|
||||
|
||||
/* Free the message */
|
||||
|
@ -1029,12 +1036,19 @@ static void mme_s6a_ula_cb(void *data, struct msg **msg)
|
|||
|
||||
if (!error)
|
||||
{
|
||||
int rv;
|
||||
e = mme_event_new(MME_EVT_S6A_MESSAGE);
|
||||
ogs_assert(e);
|
||||
e->mme_ue = mme_ue;
|
||||
e->pkbuf = s6abuf;
|
||||
mme_event_send(e);
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_error("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_pkbuf_free(e->pkbuf);
|
||||
mme_event_free(e);
|
||||
} else {
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
}
|
||||
}
|
||||
|
||||
/* Free the message */
|
||||
|
|
|
@ -25,7 +25,12 @@ static void _gtpv2_c_recv_cb(short when, ogs_socket_t fd, void *data)
|
|||
e = mme_event_new(MME_EVT_S11_MESSAGE);
|
||||
ogs_assert(e);
|
||||
e->pkbuf = pkbuf;
|
||||
mme_event_send(e);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_error("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_pkbuf_free(e->pkbuf);
|
||||
mme_event_free(e);
|
||||
}
|
||||
}
|
||||
|
||||
static ogs_sockaddr_t *pgw_addr_find_by_family(ogs_list_t *list, int family)
|
||||
|
|
|
@ -98,6 +98,7 @@ static void accept_handler(short when, ogs_socket_t fd, void *data)
|
|||
new = ogs_sock_accept(sock);
|
||||
if (new)
|
||||
{
|
||||
int rv;
|
||||
ogs_sockaddr_t *addr = NULL;
|
||||
mme_event_t *e = NULL;
|
||||
|
||||
|
@ -112,7 +113,12 @@ static void accept_handler(short when, ogs_socket_t fd, void *data)
|
|||
ogs_assert(e);
|
||||
e->enb_sock = new;
|
||||
e->enb_addr = addr;
|
||||
mme_event_send(e);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
mme_event_free(e);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -122,6 +128,7 @@ static void accept_handler(short when, ogs_socket_t fd, void *data)
|
|||
|
||||
void s1ap_recv_handler(short when, ogs_socket_t fd, void *data)
|
||||
{
|
||||
int rv;
|
||||
ogs_pkbuf_t *pkbuf;
|
||||
int size;
|
||||
mme_event_t *e = NULL;
|
||||
|
@ -190,7 +197,12 @@ void s1ap_recv_handler(short when, ogs_socket_t fd, void *data)
|
|||
not->sn_assoc_change.sac_inbound_streams;
|
||||
e->outbound_streams =
|
||||
not->sn_assoc_change.sac_outbound_streams;
|
||||
mme_event_send(e);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
mme_event_free(e);
|
||||
}
|
||||
}
|
||||
else if (not->sn_assoc_change.sac_state == SCTP_SHUTDOWN_COMP ||
|
||||
not->sn_assoc_change.sac_state == SCTP_COMM_LOST)
|
||||
|
@ -209,7 +221,12 @@ void s1ap_recv_handler(short when, ogs_socket_t fd, void *data)
|
|||
ogs_assert(e);
|
||||
e->enb_sock = sock;
|
||||
e->enb_addr = addr;
|
||||
mme_event_send(e);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
mme_event_free(e);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -228,7 +245,12 @@ void s1ap_recv_handler(short when, ogs_socket_t fd, void *data)
|
|||
ogs_assert(e);
|
||||
e->enb_sock = sock;
|
||||
e->enb_addr = addr;
|
||||
mme_event_send(e);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
mme_event_free(e);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCTP_PEER_ADDR_CHANGE:
|
||||
|
@ -276,7 +298,13 @@ void s1ap_recv_handler(short when, ogs_socket_t fd, void *data)
|
|||
e->enb_sock = sock;
|
||||
e->enb_addr = addr;
|
||||
e->pkbuf = pkbuf;
|
||||
mme_event_send(e);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
ogs_pkbuf_free(e->pkbuf);
|
||||
mme_event_free(e);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -127,6 +127,7 @@ int s1ap_delayed_send_to_enb_ue(
|
|||
|
||||
int s1ap_send_to_esm(mme_ue_t *mme_ue, ogs_pkbuf_t *esmbuf)
|
||||
{
|
||||
int rv;
|
||||
mme_event_t *e = NULL;
|
||||
|
||||
ogs_assert(mme_ue);
|
||||
|
@ -136,7 +137,12 @@ int s1ap_send_to_esm(mme_ue_t *mme_ue, ogs_pkbuf_t *esmbuf)
|
|||
ogs_assert(e);
|
||||
e->mme_ue = mme_ue;
|
||||
e->pkbuf = esmbuf;
|
||||
mme_event_send(e);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_pkbuf_free(e->pkbuf);
|
||||
mme_event_free(e);
|
||||
}
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
@ -207,13 +213,19 @@ int s1ap_send_to_nas(enb_ue_t *enb_ue,
|
|||
ogs_assert(h);
|
||||
if (h->protocol_discriminator == NAS_PROTOCOL_DISCRIMINATOR_EMM)
|
||||
{
|
||||
int rv;
|
||||
e = mme_event_new(MME_EVT_EMM_MESSAGE);
|
||||
ogs_assert(e);
|
||||
e->enb_ue = enb_ue;
|
||||
e->s1ap_code = procedureCode;
|
||||
e->nas_type = security_header_type.type;
|
||||
e->pkbuf = nasbuf;
|
||||
mme_event_send(e);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_pkbuf_free(e->pkbuf);
|
||||
mme_event_free(e);
|
||||
}
|
||||
}
|
||||
else if (h->protocol_discriminator == NAS_PROTOCOL_DISCRIMINATOR_ESM)
|
||||
{
|
||||
|
|
|
@ -429,7 +429,7 @@ static int s1ap_usrsctp_recv_handler(struct socket *sock,
|
|||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(addr);
|
||||
ogs_free(e->enb_addr);
|
||||
mme_event_free(e);
|
||||
} else {
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
|
@ -454,7 +454,7 @@ static int s1ap_usrsctp_recv_handler(struct socket *sock,
|
|||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(addr);
|
||||
ogs_free(e->enb_addr);
|
||||
mme_event_free(e);
|
||||
} else {
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
|
@ -480,7 +480,7 @@ static int s1ap_usrsctp_recv_handler(struct socket *sock,
|
|||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(addr);
|
||||
ogs_free(e->enb_addr);
|
||||
mme_event_free(e);
|
||||
} else {
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
|
@ -539,8 +539,8 @@ static int s1ap_usrsctp_recv_handler(struct socket *sock,
|
|||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(addr);
|
||||
ogs_pkbuf_free(pkbuf);
|
||||
ogs_free(e->enb_addr);
|
||||
ogs_pkbuf_free(e->pkbuf);
|
||||
mme_event_free(e);
|
||||
} else {
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
|
|
|
@ -32,9 +32,6 @@ void pgw_event_final(void);
|
|||
pgw_event_t *pgw_event_new(pgw_event_e id);
|
||||
void pgw_event_free(pgw_event_t *e);
|
||||
|
||||
#define pgw_event_send(__ptr_e) \
|
||||
ogs_assert(ogs_queue_push(pgw_self()->queue, ((__ptr_e))) == OGS_OK)
|
||||
|
||||
const char *pgw_event_get_name(pgw_event_t *e);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -712,14 +712,21 @@ out:
|
|||
e->gxbuf = gxbuf;
|
||||
e->xact_index = xact->index;
|
||||
e->gtpbuf = gtpbuf;
|
||||
pgw_event_send(e);
|
||||
ogs_pollset_notify(pgw_self()->pollset);
|
||||
rv = ogs_queue_push(pgw_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_error("ogs_queue_push() failed:%d", (int)rv);
|
||||
gx_message_free(gx_message);
|
||||
ogs_pkbuf_free(e->gxbuf);
|
||||
ogs_pkbuf_free(e->gtpbuf);
|
||||
pgw_event_free(e);
|
||||
} else {
|
||||
ogs_pollset_notify(pgw_self()->pollset);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gx_message_free(gx_message);
|
||||
ogs_pkbuf_free(gxbuf);
|
||||
|
||||
ogs_pkbuf_free(gtpbuf);
|
||||
}
|
||||
|
||||
|
@ -942,8 +949,15 @@ static int pgw_gx_rar_cb( struct msg **msg, struct avp *avp,
|
|||
|
||||
e->sess_index = sess->index;
|
||||
e->gxbuf = gxbuf;
|
||||
pgw_event_send(e);
|
||||
ogs_pollset_notify(pgw_self()->pollset);
|
||||
rv = ogs_queue_push(pgw_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_error("ogs_queue_push() failed:%d", (int)rv);
|
||||
gx_message_free(gx_message);
|
||||
ogs_pkbuf_free(e->gxbuf);
|
||||
pgw_event_free(e);
|
||||
} else {
|
||||
ogs_pollset_notify(pgw_self()->pollset);
|
||||
}
|
||||
|
||||
/* Set the Auth-Application-Id AVP */
|
||||
ret = fd_msg_avp_new(fd_auth_application_id, 0, &avp);
|
||||
|
|
|
@ -94,7 +94,12 @@ static void _gtpv2_c_recv_cb(short when, ogs_socket_t fd, void *data)
|
|||
ogs_assert(e);
|
||||
e->gtpbuf = pkbuf;
|
||||
|
||||
pgw_event_send(e);
|
||||
rv = ogs_queue_push(pgw_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_error("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_pkbuf_free(e->gtpbuf);
|
||||
pgw_event_free(e);
|
||||
}
|
||||
}
|
||||
|
||||
static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data)
|
||||
|
|
|
@ -32,9 +32,6 @@ void sgw_event_final(void);
|
|||
sgw_event_t *sgw_event_new(sgw_event_e id);
|
||||
void sgw_event_free(sgw_event_t *e);
|
||||
|
||||
#define sgw_event_send(__ptr_e) \
|
||||
ogs_assert(ogs_queue_push(sgw_self()->queue, ((__ptr_e))) == OGS_OK)
|
||||
|
||||
const char *sgw_event_get_name(sgw_event_t *e);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -29,17 +29,18 @@ static void _gtpv2_c_recv_cb(short when, ogs_socket_t fd, void *data)
|
|||
teid = ntohl(gtp_h->teid);
|
||||
|
||||
if (SGW_S5C_TEID(teid))
|
||||
{
|
||||
e = sgw_event_new(SGW_EVT_S5C_MESSAGE);
|
||||
}
|
||||
else
|
||||
{
|
||||
e = sgw_event_new(SGW_EVT_S11_MESSAGE);
|
||||
}
|
||||
ogs_assert(e);
|
||||
e->pkbuf = pkbuf;
|
||||
|
||||
sgw_event_send(e);
|
||||
rv = ogs_queue_push(sgw_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_error("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_pkbuf_free(e->pkbuf);
|
||||
sgw_event_free(e);
|
||||
}
|
||||
}
|
||||
|
||||
static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data)
|
||||
|
@ -206,7 +207,11 @@ static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data)
|
|||
e = sgw_event_new(SGW_EVT_LO_DLDATA_NOTI);
|
||||
ogs_assert(e);
|
||||
e->bearer = bearer;
|
||||
sgw_event_send(e);
|
||||
rv = ogs_queue_push(sgw_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_error("ogs_queue_push() failed:%d", (int)rv);
|
||||
sgw_event_free(e);
|
||||
}
|
||||
|
||||
SGW_SET_UE_STATE(sgw_ue, SGW_DL_NOTI_SENT);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue