@@ -144,7 +144,7 @@ class Coroutine {
144144 static void set_on_close (SwapCallback func);
145145 static void bailout (const BailoutCallback &func);
146146
147- static inline long create (const CoroutineFunc &fn, void *args = nullptr ) {
147+ static long create (const CoroutineFunc &fn, void *args = nullptr ) {
148148#ifdef SW_USE_THREAD_CONTEXT
149149 try {
150150 return (new Coroutine (fn, args))->run ();
@@ -161,61 +161,65 @@ class Coroutine {
161161 static void activate ();
162162 static void deactivate ();
163163
164- static inline Coroutine *get_current () {
164+ static Coroutine *get_current () {
165165 return current;
166166 }
167167
168- static inline Coroutine *get_current_safe () {
168+ static Coroutine *get_current_safe () {
169169 if (sw_unlikely (!current)) {
170170 swoole_fatal_error (SW_ERROR_CO_OUT_OF_COROUTINE, " API must be called in the coroutine" );
171171 }
172172 return current;
173173 }
174174
175- static inline void *get_current_task () {
175+ static void *get_current_task () {
176176 return sw_likely (current) ? current->get_task () : nullptr ;
177177 }
178178
179- static inline long get_current_cid () {
179+ static long get_current_cid () {
180180 return sw_likely (current) ? current->get_cid () : -1 ;
181181 }
182182
183- static inline Coroutine *get_by_cid (long cid) {
183+ static Coroutine *get_by_cid (long cid) {
184184 auto i = coroutines.find (cid);
185185 return sw_likely (i != coroutines.end ()) ? i->second : nullptr ;
186186 }
187187
188- static inline void *get_task_by_cid (long cid) {
188+ static void *get_task_by_cid (long cid) {
189189 Coroutine *co = get_by_cid (cid);
190190 return sw_likely (co) ? co->get_task () : nullptr ;
191191 }
192192
193- static inline size_t get_stack_size () {
193+ static size_t get_stack_size () {
194194 return stack_size;
195195 }
196196
197- static inline void set_stack_size (size_t size) {
197+ static void set_stack_size (size_t size) {
198198 stack_size = SW_MEM_ALIGNED_SIZE_EX (SW_MAX (MIN_STACK_SIZE, SW_MIN (size, MAX_STACK_SIZE)), STACK_ALIGNED_SIZE);
199199 }
200200
201- static inline long get_last_cid () {
201+ static long get_last_cid () {
202202 return last_cid;
203203 }
204204
205- static inline size_t count () {
205+ static long get_socket_bound_cid () {
206+ return socket_bound_cid;
207+ }
208+
209+ static size_t count () {
206210 return coroutines.size ();
207211 }
208212
209- static inline uint64_t get_peak_num () {
213+ static uint64_t get_peak_num () {
210214 return peak_num;
211215 }
212216
213- static inline long get_elapsed (long cid) {
217+ static long get_elapsed (long cid) {
214218 Coroutine *co = cid == 0 ? get_current () : get_by_cid (cid);
215219 return sw_likely (co) ? Timer::get_absolute_msec () - co->get_init_msec () : -1 ;
216220 }
217221
218- static inline long get_execute_time (long cid) {
222+ static long get_execute_time (long cid) {
219223 Coroutine *co = cid == 0 ? get_current () : get_by_cid (cid);
220224 return sw_likely (co) ? co->get_execute_usec () : -1 ;
221225 }
@@ -224,10 +228,12 @@ class Coroutine {
224228 static void calc_execute_usec (Coroutine *yield_coroutine, Coroutine *resume_coroutine);
225229#endif
226230 static void print_list ();
231+ static void print_socket_bound_error (int sock_fd, const char *event_str, long bound_cid);
227232
228233 protected:
229234 static SW_THREAD_LOCAL Coroutine *current;
230235 static SW_THREAD_LOCAL long last_cid;
236+ static SW_THREAD_LOCAL long socket_bound_cid;
231237 static SW_THREAD_LOCAL uint64_t peak_num;
232238 static SW_THREAD_LOCAL size_t stack_size;
233239 static SW_THREAD_LOCAL SwapCallback on_yield; /* before yield */
0 commit comments