imp++;
/* discard rejected message if it shouldn't be returned to sender */
- if (msg_errcode(msg) || msg_dest_droppable(msg)) {
- buf_discard(buf);
- return data_sz;
- }
+ if (msg_errcode(msg) || msg_dest_droppable(msg))
+ goto exit;
/* construct rejected message */
if (msg_mcast(msg))
else
hdr_sz = LONG_H_SIZE;
rbuf = tipc_buf_acquire(data_sz + hdr_sz);
- if (rbuf == NULL) {
- buf_discard(buf);
- return data_sz;
- }
+ if (rbuf == NULL)
+ goto exit;
+
rmsg = buf_msg(rbuf);
tipc_msg_init(rmsg, imp, msg_type(msg), hdr_sz, msg_orignode(msg));
msg_set_errcode(rmsg, err);
tipc_net_route_msg(abuf);
}
- /* send rejected message */
- buf_discard(buf);
+ /* send returned message & dispose of rejected message */
+
tipc_net_route_msg(rbuf);
+exit:
+ buf_discard(buf);
return data_sz;
}