@@ -1211,7 +1211,7 @@ addrinfo_memsize(const void *ptr)
12111211static const rb_data_type_t addrinfo_type = {
12121212 "socket/addrinfo" ,
12131213 {addrinfo_mark , addrinfo_free , addrinfo_memsize ,},
1214- 0 , 0 , RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE ,
1214+ 0 , 0 , RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_WB_PROTECTED ,
12151215};
12161216
12171217static VALUE
@@ -1249,7 +1249,7 @@ alloc_addrinfo(void)
12491249}
12501250
12511251static void
1252- init_addrinfo (rb_addrinfo_t * rai , struct sockaddr * sa , socklen_t len ,
1252+ init_addrinfo (VALUE self , rb_addrinfo_t * rai , struct sockaddr * sa , socklen_t len ,
12531253 int pfamily , int socktype , int protocol ,
12541254 VALUE canonname , VALUE inspectname )
12551255{
@@ -1261,8 +1261,8 @@ init_addrinfo(rb_addrinfo_t *rai, struct sockaddr *sa, socklen_t len,
12611261 rai -> pfamily = pfamily ;
12621262 rai -> socktype = socktype ;
12631263 rai -> protocol = protocol ;
1264- rai -> canonname = canonname ;
1265- rai -> inspectname = inspectname ;
1264+ RB_OBJ_WRITE ( self , & rai -> canonname , canonname ) ;
1265+ RB_OBJ_WRITE ( self , & rai -> inspectname , inspectname ) ;
12661266}
12671267
12681268VALUE
@@ -1275,7 +1275,7 @@ rsock_addrinfo_new(struct sockaddr *addr, socklen_t len,
12751275
12761276 a = addrinfo_s_allocate (rb_cAddrinfo );
12771277 DATA_PTR (a ) = rai = alloc_addrinfo ();
1278- init_addrinfo (rai , addr , len , family , socktype , protocol , canonname , inspectname );
1278+ init_addrinfo (a , rai , addr , len , family , socktype , protocol , canonname , inspectname );
12791279 return a ;
12801280}
12811281
@@ -1310,7 +1310,7 @@ call_getaddrinfo(VALUE node, VALUE service,
13101310static VALUE make_inspectname (VALUE node , VALUE service , struct addrinfo * res );
13111311
13121312static void
1313- init_addrinfo_getaddrinfo (rb_addrinfo_t * rai , VALUE node , VALUE service ,
1313+ init_addrinfo_getaddrinfo (VALUE self , rb_addrinfo_t * rai , VALUE node , VALUE service ,
13141314 VALUE family , VALUE socktype , VALUE protocol , VALUE flags ,
13151315 VALUE inspectnode , VALUE inspectservice )
13161316{
@@ -1324,7 +1324,7 @@ init_addrinfo_getaddrinfo(rb_addrinfo_t *rai, VALUE node, VALUE service,
13241324 OBJ_FREEZE (canonname );
13251325 }
13261326
1327- init_addrinfo (rai , res -> ai -> ai_addr , res -> ai -> ai_addrlen ,
1327+ init_addrinfo (self , rai , res -> ai -> ai_addr , res -> ai -> ai_addrlen ,
13281328 NUM2INT (family ), NUM2INT (socktype ), NUM2INT (protocol ),
13291329 canonname , inspectname );
13301330
@@ -1436,7 +1436,7 @@ addrinfo_list_new(VALUE node, VALUE service, VALUE family, VALUE socktype, VALUE
14361436
14371437#ifdef HAVE_TYPE_STRUCT_SOCKADDR_UN
14381438static void
1439- init_unix_addrinfo (rb_addrinfo_t * rai , VALUE path , int socktype )
1439+ init_unix_addrinfo (VALUE self , rb_addrinfo_t * rai , VALUE path , int socktype )
14401440{
14411441 struct sockaddr_un un ;
14421442 socklen_t len ;
@@ -1452,7 +1452,7 @@ init_unix_addrinfo(rb_addrinfo_t *rai, VALUE path, int socktype)
14521452 memcpy ((void * )& un .sun_path , RSTRING_PTR (path ), RSTRING_LEN (path ));
14531453
14541454 len = rsock_unix_sockaddr_len (path );
1455- init_addrinfo (rai , (struct sockaddr * )& un , len ,
1455+ init_addrinfo (self , rai , (struct sockaddr * )& un , len ,
14561456 PF_UNIX , socktype , 0 , Qnil , Qnil );
14571457}
14581458
@@ -1556,7 +1556,7 @@ addrinfo_initialize(int argc, VALUE *argv, VALUE self)
15561556 flags |= AI_NUMERICSERV ;
15571557#endif
15581558
1559- init_addrinfo_getaddrinfo (rai , numericnode , service ,
1559+ init_addrinfo_getaddrinfo (self , rai , numericnode , service ,
15601560 INT2NUM (i_pfamily ? i_pfamily : af ), INT2NUM (i_socktype ), INT2NUM (i_protocol ),
15611561 INT2NUM (flags ),
15621562 nodename , service );
@@ -1568,7 +1568,7 @@ addrinfo_initialize(int argc, VALUE *argv, VALUE self)
15681568 {
15691569 VALUE path = rb_ary_entry (sockaddr_ary , 1 );
15701570 StringValue (path );
1571- init_unix_addrinfo (rai , path , SOCK_STREAM );
1571+ init_unix_addrinfo (self , rai , path , SOCK_STREAM );
15721572 break ;
15731573 }
15741574#endif
@@ -1581,7 +1581,7 @@ addrinfo_initialize(int argc, VALUE *argv, VALUE self)
15811581 StringValue (sockaddr_arg );
15821582 sockaddr_ptr = (struct sockaddr * )RSTRING_PTR (sockaddr_arg );
15831583 sockaddr_len = RSTRING_SOCKLEN (sockaddr_arg );
1584- init_addrinfo (rai , sockaddr_ptr , sockaddr_len ,
1584+ init_addrinfo (self , rai , sockaddr_ptr , sockaddr_len ,
15851585 i_pfamily , i_socktype , i_protocol ,
15861586 canonname , inspectname );
15871587 }
@@ -2170,7 +2170,7 @@ addrinfo_mload(VALUE self, VALUE ary)
21702170 }
21712171
21722172 DATA_PTR (self ) = rai = alloc_addrinfo ();
2173- init_addrinfo (rai , & ss .addr , len ,
2173+ init_addrinfo (self , rai , & ss .addr , len ,
21742174 pfamily , socktype , protocol ,
21752175 canonname , inspectname );
21762176 return self ;
@@ -2938,7 +2938,7 @@ addrinfo_s_unix(int argc, VALUE *argv, VALUE self)
29382938
29392939 addr = addrinfo_s_allocate (rb_cAddrinfo );
29402940 DATA_PTR (addr ) = rai = alloc_addrinfo ();
2941- init_unix_addrinfo (rai , path , socktype );
2941+ init_unix_addrinfo (self , rai , path , socktype );
29422942 return addr ;
29432943}
29442944
0 commit comments