@@ -33,13 +33,11 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3333
3434static object * SelectError ;
3535
36- /* XXX This module should be re-entrant! */
37- static object * fd2obj [FD_SETSIZE ];
38-
3936static
40- list2set (list , set )
37+ list2set (list , set , fd2obj )
4138 object * list ;
4239 fd_set * set ;
40+ object * fd2obj [FD_SETSIZE ];
4341{
4442 int i , len , v , max = -1 ;
4543 object * o , * filenomethod , * fno ;
@@ -76,9 +74,10 @@ list2set(list, set)
7674}
7775
7876static object *
79- set2list (set , max )
77+ set2list (set , max , fd2obj )
8078 fd_set * set ;
8179 int max ;
80+ object * fd2obj [FD_SETSIZE ];
8281{
8382 int i , num = 0 ;
8483 object * list , * o ;
@@ -112,6 +111,7 @@ select_select(self, args)
112111 object * self ;
113112 object * args ;
114113{
114+ object * fd2obj [FD_SETSIZE ];
115115 object * ifdlist , * ofdlist , * efdlist ;
116116 fd_set ifdset , ofdset , efdset ;
117117 double timeout ;
@@ -141,14 +141,14 @@ select_select(self, args)
141141 return 0 ;
142142 }
143143
144- bzero ((char * )fd2obj , sizeof (fd2obj )); /* Not really needed */
144+ memset ((char * )fd2obj , '\0' , sizeof (fd2obj ));
145145
146146 /* Convert lists to fd_sets, and get maximum fd number */
147- if ( (imax = list2set (ifdlist , & ifdset )) < 0 )
147+ if ( (imax = list2set (ifdlist , & ifdset , fd2obj )) < 0 )
148148 return 0 ;
149- if ( (omax = list2set (ofdlist , & ofdset )) < 0 )
149+ if ( (omax = list2set (ofdlist , & ofdset , fd2obj )) < 0 )
150150 return 0 ;
151- if ( (emax = list2set (efdlist , & efdset )) < 0 )
151+ if ( (emax = list2set (efdlist , & efdset , fd2obj )) < 0 )
152152 return 0 ;
153153 max = imax ;
154154 if ( omax > max ) max = omax ;
@@ -164,9 +164,9 @@ select_select(self, args)
164164 if ( n == 0 )
165165 imax = omax = emax = 0 ; /* Speedup hack */
166166
167- ifdlist = set2list (& ifdset , imax );
168- ofdlist = set2list (& ofdset , omax );
169- efdlist = set2list (& efdset , emax );
167+ ifdlist = set2list (& ifdset , imax , fd2obj );
168+ ofdlist = set2list (& ofdset , omax , fd2obj );
169+ efdlist = set2list (& efdset , emax , fd2obj );
170170
171171 return mkvalue ("OOO" , ifdlist , ofdlist , efdlist );
172172}
0 commit comments