Zebediah Figura (@zfigura) commented about server/sock.c:
+ struct bound_addr *bound_addr; + + if (!(bound_addr = malloc( sizeof(*bound_addr) ))) + fatal_error( "out of memory\n" ); + + if (rb_put( &bound_addresses_tree, addr, &bound_addr->entry )) + { + free( bound_addr ); + bound_addr = WINE_RB_ENTRY_VALUE(rb_get( &bound_addresses_tree, addr ), struct bound_addr, entry); + if (bound_addr->reuse_count == -1) + { + if (debug_level) + fprintf( stderr, "register_bound_address: address being updated is already exclusively bound\n" ); + return NULL; + } + ++bound_addr->reuse_count; Under what circumstances can this happen? Should this be an assert() instead?
(I know that we don't want to bring down the server, but I think it's better to assert than go ahead with something that really shouldn't be the case. Alexandre might disagree with me, though.) -- https://gitlab.winehq.org/wine/wine/-/merge_requests/1111#note_12141