@@ -3394,7 +3394,15 @@ static HRESULT DP_SecureOpen( IDirectPlayImpl *This, const DPSESSIONDESC2 *lpsd,
3394
3394
3395
3395
hr = DP_IF_CreateGroup ( This , NULL , & systemGroup , NULL ,
3396
3396
NULL , 0 , 0 , TRUE );
3397
-
3397
+ if ( FAILED ( hr ) )
3398
+ {
3399
+ if ( This -> dp2 -> spData .lpCB -> CloseEx )
3400
+ {
3401
+ DPSP_CLOSEDATA data ;
3402
+ data .lpISP = This -> dp2 -> spData .lpISP ;
3403
+ (* This -> dp2 -> spData .lpCB -> CloseEx )( & data );
3404
+ }
3405
+ }
3398
3406
}
3399
3407
3400
3408
if ( dwFlags & DPOPEN_JOIN )
@@ -3414,17 +3422,43 @@ static HRESULT DP_SecureOpen( IDirectPlayImpl *This, const DPSESSIONDESC2 *lpsd,
3414
3422
if ( FAILED ( hr ) )
3415
3423
{
3416
3424
ERR ( "Request for ID failed: %s\n" , DPLAYX_HresultToString ( hr ) );
3425
+ DP_IF_DestroyGroup ( This , NULL , DPID_SYSTEM_GROUP , TRUE );
3426
+ if ( This -> dp2 -> spData .lpCB -> CloseEx )
3427
+ {
3428
+ DPSP_CLOSEDATA data ;
3429
+ data .lpISP = This -> dp2 -> spData .lpISP ;
3430
+ (* This -> dp2 -> spData .lpCB -> CloseEx )( & data );
3431
+ }
3417
3432
return hr ;
3418
3433
}
3419
3434
3420
3435
hr = DP_CreatePlayer ( This , NULL , & dpidServerId , NULL , NULL , 0 , NULL , 0 , createFlags , NULL ,
3421
3436
bAnsi );
3422
3437
if ( FAILED ( hr ) )
3438
+ {
3439
+ DP_IF_DestroyGroup ( This , NULL , DPID_SYSTEM_GROUP , TRUE );
3440
+ if ( This -> dp2 -> spData .lpCB -> CloseEx )
3441
+ {
3442
+ DPSP_CLOSEDATA data ;
3443
+ data .lpISP = This -> dp2 -> spData .lpISP ;
3444
+ (* This -> dp2 -> spData .lpCB -> CloseEx )( & data );
3445
+ }
3423
3446
return hr ;
3447
+ }
3424
3448
3425
3449
hr = DP_MSG_ForwardPlayerCreation ( This , dpidServerId );
3426
3450
if ( FAILED ( hr ) )
3451
+ {
3452
+ DP_DeletePlayer ( This , dpidServerId );
3453
+ DP_IF_DestroyGroup ( This , NULL , DPID_SYSTEM_GROUP , TRUE );
3454
+ if ( This -> dp2 -> spData .lpCB -> CloseEx )
3455
+ {
3456
+ DPSP_CLOSEDATA data ;
3457
+ data .lpISP = This -> dp2 -> spData .lpISP ;
3458
+ (* This -> dp2 -> spData .lpCB -> CloseEx )( & data );
3459
+ }
3427
3460
return hr ;
3461
+ }
3428
3462
}
3429
3463
else if ( dwFlags & DPOPEN_CREATE )
3430
3464
{
@@ -3434,7 +3468,16 @@ static HRESULT DP_SecureOpen( IDirectPlayImpl *This, const DPSESSIONDESC2 *lpsd,
3434
3468
hr = DP_CreatePlayer ( This , NULL , & dpidNameServerId , NULL , NULL , 0 , NULL , 0 , createFlags , NULL ,
3435
3469
bAnsi );
3436
3470
if ( FAILED ( hr ) )
3471
+ {
3472
+ DP_IF_DestroyGroup ( This , NULL , DPID_SYSTEM_GROUP , TRUE );
3473
+ if ( This -> dp2 -> spData .lpCB -> CloseEx )
3474
+ {
3475
+ DPSP_CLOSEDATA data ;
3476
+ data .lpISP = This -> dp2 -> spData .lpISP ;
3477
+ (* This -> dp2 -> spData .lpCB -> CloseEx )( & data );
3478
+ }
3437
3479
return hr ;
3480
+ }
3438
3481
}
3439
3482
3440
3483
return DP_OK ;
0 commit comments