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 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.