diff --git a/libraries/libldap/abandon.c b/libraries/libldap/abandon.c index 551940d1b1..c03d9264d6 100644 --- a/libraries/libldap/abandon.c +++ b/libraries/libldap/abandon.c @@ -124,14 +124,22 @@ do_abandon( sendabandon = 1; /* find the request that we are abandoning */ - for ( lr = ld->ld_requests; lr != NULL; lr = lr->lr_next ) { +start_again:; + lr = ld->ld_requests; + while ( lr != NULL ) { if ( lr->lr_msgid == msgid ) { /* this message */ break; } + if ( lr->lr_origid == msgid ) {/* child: abandon it */ - (void) do_abandon( ld, + (void)do_abandon( ld, lr->lr_origid, lr->lr_msgid, sctrls, cctrls ); + + /* restart, as lr may now be dangling... */ + goto start_again; } + + lr = lr->lr_next; } if ( lr != NULL ) {