… | |
… | |
867 | static int coro_nready; |
867 | static int coro_nready; |
868 | |
868 | |
869 | static void |
869 | static void |
870 | coro_enq (pTHX_ SV *sv) |
870 | coro_enq (pTHX_ SV *sv) |
871 | { |
871 | { |
872 | if (SvTYPE (sv) == SVt_PVHV) |
872 | if (SvTYPE (sv) != SVt_PVHV) |
873 | { |
|
|
874 | SV **xprio = hv_fetch ((HV *)sv, "prio", 4, 0); |
|
|
875 | int prio = xprio ? SvIV (*xprio) : PRIO_NORMAL; |
|
|
876 | |
|
|
877 | prio = prio > PRIO_MAX ? PRIO_MAX |
|
|
878 | : prio < PRIO_MIN ? PRIO_MIN |
|
|
879 | : prio; |
|
|
880 | |
|
|
881 | av_push (coro_ready [prio - PRIO_MIN], sv); |
|
|
882 | coro_nready++; |
|
|
883 | |
|
|
884 | return; |
|
|
885 | } |
|
|
886 | |
|
|
887 | croak ("Coro::ready tried to enqueue something that is not a coroutine"); |
873 | croak ("Coro::ready tried to enqueue something that is not a coroutine"); |
|
|
874 | |
|
|
875 | SV **xprio = hv_fetch ((HV *)sv, "prio", 4, 0); |
|
|
876 | int prio = xprio ? SvIV (*xprio) : PRIO_NORMAL; |
|
|
877 | |
|
|
878 | prio = prio > PRIO_MAX ? PRIO_MAX |
|
|
879 | : prio < PRIO_MIN ? PRIO_MIN |
|
|
880 | : prio; |
|
|
881 | |
|
|
882 | av_push (coro_ready [prio - PRIO_MIN], sv); |
|
|
883 | coro_nready++; |
888 | } |
884 | } |
889 | |
885 | |
890 | static SV * |
886 | static SV * |
891 | coro_deq (pTHX_ int min_prio) |
887 | coro_deq (pTHX_ int min_prio) |
892 | { |
888 | { |