Potential bug

int prn_status( prn_t *prn )
{

if( urb = usbd_alloc_urb( NULL ) ) {
if( buffer = usbd_alloc( 1 ) ) {
usbd_setup_vendor( urb, URB_DIR_IN, … );
if( ( status = usbd_io( urb, … ) {
prn->query_status = …
}
usbd_free_urb( urb );
}
usbd_free( buffer );
}

return( status );
}

Shouldn’t the usbd_free(buffer) and usbd_free_urb(urb) be inversed.

if usdb_alloc(1) fails the urb will never be freed?

  • Mario

Mario Charest <mcharest@nozinformatic.com> wrote:


int prn_status( prn_t *prn )
{

if( urb = usbd_alloc_urb( NULL ) ) {
if( buffer = usbd_alloc( 1 ) ) {
usbd_setup_vendor( urb, URB_DIR_IN, … );
if( ( status = usbd_io( urb, … ) {
prn->query_status = …
}
usbd_free_urb( urb );
}
usbd_free( buffer );
}

return( status );
}

Shouldn’t the usbd_free(buffer) and usbd_free_urb(urb) be inversed.

if usdb_alloc(1) fails the urb will never be freed?

Looks like a bug. I will make sure the source is updated in the next DDK.