@@ -1113,9 +1113,13 @@ int link_request_address(
11131113 if (address_get (link , address , & existing ) < 0 ) {
11141114 _cleanup_ (address_freep ) Address * tmp = NULL ;
11151115
1116- r = address_dup (address , & tmp );
1117- if (r < 0 )
1118- return r ;
1116+ if (consume_object )
1117+ tmp = address ;
1118+ else {
1119+ r = address_dup (address , & tmp );
1120+ if (r < 0 )
1121+ return r ;
1122+ }
11191123
11201124 /* Consider address tentative until we get the real flags from the kernel */
11211125 tmp -> flags |= IFA_F_TENTATIVE ;
@@ -1128,14 +1132,18 @@ int link_request_address(
11281132 } else {
11291133 existing -> source = address -> source ;
11301134 existing -> provider = address -> provider ;
1135+ existing -> lifetime_valid_usec = address -> lifetime_valid_usec ;
1136+ existing -> lifetime_preferred_usec = address -> lifetime_preferred_usec ;
1137+ if (consume_object )
1138+ address_free (address );
11311139 }
11321140
11331141 r = ipv4acd_configure (existing );
11341142 if (r < 0 )
11351143 return r ;
11361144
1137- log_address_debug (address , "Requesting" , link );
1138- r = link_queue_request (link , REQUEST_TYPE_ADDRESS , address , consume_object ,
1145+ log_address_debug (existing , "Requesting" , link );
1146+ r = link_queue_request (link , REQUEST_TYPE_ADDRESS , existing , false ,
11391147 message_counter , netlink_handler , ret );
11401148 if (r < 0 )
11411149 return log_link_warning_errno (link , r , "Failed to request address: %m" );
0 commit comments