@@ -128,13 +128,19 @@ static ngx_int_t
128
128
ngx_rtmp_auto_push_init_process (ngx_cycle_t * cycle )
129
129
{
130
130
#if (NGX_HAVE_UNIX_DOMAIN )
131
- ngx_rtmp_auto_push_conf_t * apcf ;
132
- ngx_listening_t * ls , * lss ;
133
- struct sockaddr_un * saun ;
134
- int reuseaddr ;
135
- ngx_socket_t s ;
136
- size_t n ;
137
- ngx_file_info_t fi ;
131
+ ngx_rtmp_auto_push_conf_t * apcf ;
132
+ ngx_listening_t * ls , * lss ;
133
+ struct sockaddr_un * saun ;
134
+ #if (nginx_version >= 1009011 )
135
+ ngx_event_t * rev ;
136
+ ngx_connection_t * c , * old ;
137
+ ngx_module_t * * modules ;
138
+ ngx_int_t i , auto_push_index , event_core_index ;
139
+ #endif
140
+ int reuseaddr ;
141
+ ngx_socket_t s ;
142
+ size_t n ;
143
+ ngx_file_info_t fi ;
138
144
139
145
if (ngx_process != NGX_PROCESS_WORKER ) {
140
146
return NGX_OK ;
@@ -260,6 +266,103 @@ ngx_rtmp_auto_push_init_process(ngx_cycle_t *cycle)
260
266
ls -> reuseport = 0 ;
261
267
#endif
262
268
269
+ /* for dynamic module */
270
+ #if (nginx_version >= 1009011 )
271
+ auto_push_index = -1 ;
272
+ event_core_index = -1 ;
273
+
274
+ modules = cycle -> modules ;
275
+
276
+ for (i = 0 ; modules [i ]; ++ i ) {
277
+ if (ngx_strcmp (modules [i ]-> name , "ngx_event_core_module" ) == 0 ) {
278
+ event_core_index = i ;
279
+ }
280
+
281
+ if (ngx_strcmp (modules [i ]-> name , "ngx_rtmp_auto_push_module" ) == 0 ) {
282
+ auto_push_index = i ;
283
+ }
284
+
285
+ if (auto_push_index != -1 && event_core_index != -1 ) {
286
+ break ;
287
+ }
288
+ }
289
+
290
+ if (auto_push_index > event_core_index ) {
291
+ c = ngx_get_connection (ls -> fd , cycle -> log );
292
+ if (c == NULL ) {
293
+ goto sock_error ;
294
+ }
295
+
296
+ rev = c -> read ;
297
+
298
+ c -> type = ls -> type ;
299
+ c -> log = & ls -> log ;
300
+
301
+ c -> listening = ls ;
302
+ ls -> connection = c ;
303
+
304
+ rev -> log = c -> log ;
305
+ rev -> accept = 1 ;
306
+
307
+ #if (NGX_HAVE_DEFERRED_ACCEPT )
308
+ rev -> deferred_accept = ls -> deferred_accept ;
309
+ #endif
310
+
311
+ if (!(ngx_event_flags & NGX_USE_IOCP_EVENT )) {
312
+ if (ls -> previous ) {
313
+
314
+ /*
315
+ * delete the old accept events that were bound to
316
+ * the old cycle read events array
317
+ */
318
+
319
+ old = ls -> previous -> connection ;
320
+
321
+ if (ngx_del_event (old -> read , NGX_READ_EVENT , NGX_CLOSE_EVENT )
322
+ == NGX_ERROR )
323
+ {
324
+ return NGX_ERROR ;
325
+ }
326
+
327
+ old -> fd = (ngx_socket_t ) - 1 ;
328
+ }
329
+ }
330
+
331
+ #if (NGX_WIN32 )
332
+ if (ngx_event_flags & NGX_USE_IOCP_EVENT ) {
333
+ ngx_iocp_conf_t * iocpcf ;
334
+
335
+ rev -> handler = ngx_event_acceptex ;
336
+
337
+ if (ngx_add_event (rev , 0 , NGX_IOCP_ACCEPT ) == NGX_ERROR ) {
338
+ return NGX_ERROR ;
339
+ }
340
+
341
+ ls -> log .handler = ngx_acceptex_log_error ;
342
+
343
+ iocpcf = ngx_event_get_conf (ngx_cycle -> conf_ctx , ngx_iocp_module );
344
+ if (ngx_event_post_acceptex (ls , iocpcf -> post_acceptex )
345
+ == NGX_ERROR )
346
+ {
347
+ return NGX_ERROR ;
348
+ }
349
+ } else {
350
+ rev -> handler = ngx_event_accept ;
351
+
352
+ if (ngx_add_event (rev , NGX_READ_EVENT , 0 ) == NGX_ERROR ) {
353
+ return NGX_ERROR ;
354
+ }
355
+ }
356
+ #else
357
+ rev -> handler = ngx_event_accept ;
358
+
359
+ if (ngx_add_event (rev , NGX_READ_EVENT , 0 ) == NGX_ERROR ) {
360
+ return NGX_ERROR ;
361
+ }
362
+ #endif
363
+ }
364
+ #endif
365
+
263
366
return NGX_OK ;
264
367
265
368
sock_error :
0 commit comments