WRK_CTX_HEAD
SM_TAILQ_INIT(&WRK_CTX_HEAD);
ctx = SM_TAILQ_FIRST(&WRK_CTX_HEAD);
while (ctx != SM_TAILQ_END(&WRK_CTX_HEAD))
SM_TAILQ_FOREACH(ctx, &WRK_CTX_HEAD, ctx_link)
SM_TAILQ_FOREACH(ctx, &WRK_CTX_HEAD, ctx_link)
ctx = SM_TAILQ_FIRST(&WRK_CTX_HEAD);
SM_TAILQ_FOREACH(ctx, &WRK_CTX_HEAD, ctx_link) \
SM_TAILQ_INSERT_TAIL(&WRK_CTX_HEAD, ctx, ctx_link);
if (SM_TAILQ_EMPTY(&WRK_CTX_HEAD))
SM_TAILQ_REMOVE(&WRK_CTX_HEAD, ctx, ctx_link);