1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
|
test_use_count_fsm()
DFOO DEBUG foo(a){IN_USE}: Allocated
DFOO DEBUG foo(b){IN_USE}: Allocated
DFOO DEBUG foo(c){IN_USE}: Allocated
all use counts:
a: 0 (-)
b: 0 (-)
c: 0 (-)
3 foos
A few gets and puts, logging source file information
DFOO NOTICE foo(a){IN_USE}: a +1 barring: now used by 1 (barring) (use_count_test.c:219)
DFOO NOTICE foo(b){IN_USE}: b +1 barring: now used by 1 (barring) (use_count_test.c:221)
DFOO NOTICE foo(b){IN_USE}: b +1 fighting: now used by 2 (barring,fighting) (use_count_test.c:222)
all use counts:
a: 1 (barring)
b: 2 (barring,fighting)
c: 0 (-)
3 foos
Attempt to get more than one on limited 'barring' user:
DFOO ERROR foo(b){IN_USE}: Attempt to get more than one barring (use_count_test.c:227)
osmo_use_count_get_put(b, barring, 1) returned error: -34 Numerical result out of range
all use counts:
a: 1 (barring)
b: 2 (barring,fighting)
c: 0 (-)
3 foos
Put away one user of b
DFOO NOTICE foo(b){IN_USE}: b -1 barring: now used by 1 (fighting) (use_count_test.c:231)
all use counts:
a: 1 (barring)
b: 1 (fighting)
c: 0 (-)
3 foos
(no longer log source file information)
Test null use token
DFOO NOTICE foo(a){IN_USE}: a +1 NULL: now used by 2 (barring,NULL)
all use counts:
a: 2 (barring,NULL)
b: 1 (fighting)
c: 0 (-)
3 foos
DFOO NOTICE foo(a){IN_USE}: a -1 NULL: now used by 1 (barring)
all use counts:
a: 1 (barring)
b: 1 (fighting)
c: 0 (-)
3 foos
Put away last user of a, goes to RELEASING state and waits for a hypothetic async release process
DFOO NOTICE foo(a){IN_USE}: a -1 barring: now used by 0 (-)
DFOO DEBUG foo(a){IN_USE}: Received Event FOO_EV_UNUSED
DFOO DEBUG foo(a){IN_USE}: state_chg to IN_RELEASE
DFOO NOTICE foo(a){IN_RELEASE}: a +1 releasing: now used by 1 (releasing)
all use counts:
a: 1 (releasing)
b: 1 (fighting)
c: 0 (-)
3 foos
Async releasing of a is done, will dealloc
DFOO NOTICE foo(a){IN_RELEASE}: a -1 releasing: now used by 0 (-)
DFOO DEBUG foo(a){IN_RELEASE}: Received Event FOO_EV_UNUSED
DFOO DEBUG foo(a){IN_RELEASE}: Terminating (cause = OSMO_FSM_TERM_REGULAR)
DFOO DEBUG foo(a){IN_RELEASE}: Freeing instance
DFOO DEBUG foo(a){IN_RELEASE}: Deallocated
all use counts:
b: 1 (fighting)
c: 0 (-)
2 foos
Use b multiple times
DFOO NOTICE foo(b){IN_USE}: b +1 kungfoo: now used by 2 (fighting,kungfoo)
DFOO NOTICE foo(b){IN_USE}: b +1 kungfoo: now used by 3 (fighting,2*kungfoo)
DFOO NOTICE foo(b){IN_USE}: b -1 kungfoo: now used by 2 (fighting,kungfoo)
DFOO NOTICE foo(b){IN_USE}: b +1 kungfoo: now used by 3 (fighting,2*kungfoo)
DFOO NOTICE foo(b){IN_USE}: b +1 kungfoo: now used by 4 (fighting,3*kungfoo)
all use counts:
b: 4 (fighting,3*kungfoo)
c: 0 (-)
2 foos
Test range: set kung-fu to INT32_MAX-1, then get three more; total count gets max-clamped to INT32_MAX
DFOO NOTICE foo(b){IN_USE}: b +2147483643 kungfoo: now used by 2147483647 (fighting,2147483646*kungfoo)
all use counts:
b: 2147483647 (fighting,2147483646*kungfoo)
c: 0 (-)
2 foos
DFOO NOTICE foo(b){IN_USE}: b +1 kungfoo: now used by 2147483647 (fighting,2147483647*kungfoo)
osmo_use_count_get_put(b, kungfoo, 1) returned error: -34 Numerical result out of range
osmo_use_count_get_put(b, kungfoo, 1) returned error: -34 Numerical result out of range
DFOO NOTICE foo(b){IN_USE}: b +2 fighting: now used by 2147483647 (3*fighting,2147483647*kungfoo)
DFOO NOTICE foo(b){IN_USE}: b -3 kungfoo: now used by 2147483647 (3*fighting,2147483644*kungfoo)
DFOO NOTICE foo(b){IN_USE}: b -1 kungfoo: now used by 2147483646 (3*fighting,2147483643*kungfoo)
DFOO NOTICE foo(b){IN_USE}: b -1 kungfoo: now used by 2147483645 (3*fighting,2147483642*kungfoo)
DFOO NOTICE foo(b){IN_USE}: b +1 fighting: now used by 2147483646 (4*fighting,2147483642*kungfoo)
DFOO NOTICE foo(b){IN_USE}: b +1 fighting: now used by 2147483647 (5*fighting,2147483642*kungfoo)
DFOO NOTICE foo(b){IN_USE}: b +1 fighting: now used by 2147483647 (6*fighting,2147483642*kungfoo)
all use counts:
b: 2147483647 (6*fighting,2147483642*kungfoo)
c: 0 (-)
2 foos
Release all uses of b
DFOO NOTICE foo(b){IN_USE}: b -2147483642 kungfoo: now used by 6 (6*fighting)
DFOO NOTICE foo(b){IN_USE}: b -6 fighting: now used by 0 (-)
DFOO DEBUG foo(b){IN_USE}: Received Event FOO_EV_UNUSED
DFOO DEBUG foo(b){IN_USE}: state_chg to IN_RELEASE
DFOO NOTICE foo(b){IN_RELEASE}: b +1 releasing: now used by 1 (releasing)
Signal async release as done
DFOO NOTICE foo(b){IN_RELEASE}: b -1 releasing: now used by 0 (-)
DFOO DEBUG foo(b){IN_RELEASE}: Received Event FOO_EV_UNUSED
DFOO DEBUG foo(b){IN_RELEASE}: Terminating (cause = OSMO_FSM_TERM_REGULAR)
DFOO DEBUG foo(b){IN_RELEASE}: Freeing instance
DFOO DEBUG foo(b){IN_RELEASE}: Deallocated
all use counts:
c: 0 (-)
1 foos
Release something not gotten before: a get/put bug goes into negative count
DFOO NOTICE foo(c){IN_USE}: c -1 kungfoo: now used by -1 (-1*kungfoo)
DFOO ERROR foo(c){IN_USE}: Negative use count on kungfoo: -1 (-1*kungfoo)
all use counts:
c: -1 (-1*kungfoo)
1 foos
More negative
DFOO NOTICE foo(c){IN_USE}: c -1 kungfoo: now used by -2 (-2*kungfoo)
DFOO ERROR foo(c){IN_USE}: Negative use count on kungfoo: -2 (-2*kungfoo)
DFOO NOTICE foo(c){IN_USE}: c -1 kungfoo: now used by -3 (-3*kungfoo)
DFOO ERROR foo(c){IN_USE}: Negative use count on kungfoo: -3 (-3*kungfoo)
all use counts:
c: -3 (-3*kungfoo)
1 foos
Also release c
DFOO NOTICE foo(c){IN_USE}: c +4 kungfoo: now used by 1 (kungfoo)
DFOO NOTICE foo(c){IN_USE}: c -1 kungfoo: now used by 0 (-)
DFOO DEBUG foo(c){IN_USE}: Received Event FOO_EV_UNUSED
DFOO DEBUG foo(c){IN_USE}: state_chg to IN_RELEASE
DFOO NOTICE foo(c){IN_RELEASE}: c +1 releasing: now used by 1 (releasing)
Signal async release as done
DFOO NOTICE foo(c){IN_RELEASE}: c -1 releasing: now used by 0 (-)
DFOO DEBUG foo(c){IN_RELEASE}: Received Event FOO_EV_UNUSED
DFOO DEBUG foo(c){IN_RELEASE}: Terminating (cause = OSMO_FSM_TERM_REGULAR)
DFOO DEBUG foo(c){IN_RELEASE}: Freeing instance
DFOO DEBUG foo(c){IN_RELEASE}: Deallocated
all use counts:
0 foos
|