@@ -128,13 +128,19 @@ static ngx_int_t
128128ngx_rtmp_auto_push_init_process (ngx_cycle_t * cycle )
129129{
130130#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 ;
138144
139145 if (ngx_process != NGX_PROCESS_WORKER ) {
140146 return NGX_OK ;
@@ -260,6 +266,103 @@ ngx_rtmp_auto_push_init_process(ngx_cycle_t *cycle)
260266 ls -> reuseport = 0 ;
261267#endif
262268
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+
263366 return NGX_OK ;
264367
265368sock_error :
0 commit comments