A few small bugs with BIO popping.
authorRichard Levitte <levitte@openssl.org>
Thu, 30 Jan 2003 21:49:12 +0000 (21:49 +0000)
committerRichard Levitte <levitte@openssl.org>
Thu, 30 Jan 2003 21:49:12 +0000 (21:49 +0000)
PR: 364

crypto/bio/bio_lib.c
ssl/bio_ssl.c

index 98ce395519f4f18e81cff8a7ce211c9a391246dd..692c8fb5c653f7f5c59b496247e1fc508c117a9f 100644 (file)
@@ -395,6 +395,8 @@ BIO *BIO_pop(BIO *b)
        if (b == NULL) return(NULL);
        ret=b->next_bio;
 
+       BIO_ctrl(b,BIO_CTRL_POP,0,NULL);
+
        if (b->prev_bio != NULL)
                b->prev_bio->next_bio=b->next_bio;
        if (b->next_bio != NULL)
@@ -402,7 +404,6 @@ BIO *BIO_pop(BIO *b)
 
        b->next_bio=NULL;
        b->prev_bio=NULL;
-       BIO_ctrl(b,BIO_CTRL_POP,0,NULL);
        return(ret);
        }
 
index 467e1499470efe906900e23ad9f1396378eb6758..1301549e21ff60b4e800bed41307ae8691a187b4 100644 (file)
@@ -403,6 +403,10 @@ static long ssl_ctrl(BIO *b, int cmd, long num, void *ptr)
                        {
                        BIO_free_all(ssl->wbio);
                        }
+               if (b->next_bio != NULL)
+                       {
+                       CRYPTO_add(&b->next_bio->references,1,CRYPTO_LOCK_BIO);
+                       }
                ssl->wbio=NULL;
                ssl->rbio=NULL;
                break;