#define IN_REQUEST_CANCEL_MUX(_trunk) (((_trunk)->funcs.request_cancel_mux) && ((_trunk)->in_handler == (void *)(_trunk)->funcs.request_cancel_mux))
#define IS_SERVICEABLE(_tconn) ((_tconn)->pub.state & FR_TRUNK_CONN_SERVICEABLE)
+#define IS_PROCESSING(_tconn) ((tconn)->pub.state & FR_TRUNK_CONN_PROCESSING)
/** Remove the current request from the backlog
*
fr_trunk_t *trunk = treq->pub.trunk;
fr_assert(tconn->pub.trunk == trunk);
- fr_assert(IS_SERVICEABLE(tconn));
+ fr_assert(IS_PROCESSING(tconn));
switch (treq->pub.state) {
case FR_TRUNK_REQUEST_STATE_INIT:
if (!tconn) return FR_TRUNK_ENQUEUE_FAIL;
- if (!IS_SERVICEABLE(tconn)) {
+ if (!IS_PROCESSING(tconn)) {
trunk_request_enter_failed(treq);
return FR_TRUNK_ENQUEUE_DST_UNAVAILABLE;
}
FR_TRUNK_CONN_DRAINING_TO_FREE \
)
+/** States where the connection may be processing requests
+ *
+ */
+#define FR_TRUNK_CONN_PROCESSING \
+(\
+ FR_TRUNK_CONN_ACTIVE | \
+ FR_TRUNK_CONN_FULL | \
+ FR_TRUNK_CONN_INACTIVE | \
+ FR_TRUNK_CONN_DRAINING | \
+ FR_TRUNK_CONN_INACTIVE_DRAINING | \
+ FR_TRUNK_CONN_DRAINING_TO_FREE \
+)
+
typedef enum {
FR_TRUNK_ENQUEUE_IN_BACKLOG = 1, //!< Request should be enqueued in backlog
FR_TRUNK_ENQUEUE_OK = 0, //!< Operation was successful.