Hi Tim, It would be better to stop the adding of NULL effects. function ff_effects_callback hr = IDirectInputDevice2_CreateEffect( joystick->device, &pdei->guid, &dieffect, &joystick->effects[joystick->cur_effect].effect, NULL); /* hr is assigned but never checked. */ Best Regards Alistair. On 19/5/19 5:02 am, Tim Schumacher wrote:
Since IDirectInputEffect_Release(obj) is just a macro for (obj)->Release(), the program crashes if the effect we are trying to release is null. This mostly happens when the effect failed to allocate in the first place.
Signed-off-by: Tim Schumacher <timschumi(a)gmx.de> --- dlls/joy.cpl/main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/dlls/joy.cpl/main.c b/dlls/joy.cpl/main.c index 9768917641..06084f3166 100644 --- a/dlls/joy.cpl/main.c +++ b/dlls/joy.cpl/main.c @@ -137,7 +137,8 @@ static void destroy_joysticks(struct JoystickData *data) if (data->joysticks[i].forcefeedback && data->joysticks[i].num_effects > 0) { for (j = 0; j < data->joysticks[i].num_effects; j++) - IDirectInputEffect_Release(data->joysticks[i].effects[j].effect); + if (data->joysticks[i].effects[j].effect) + IDirectInputEffect_Release(data->joysticks[i].effects[j].effect);
HeapFree(GetProcessHeap(), 0, data->joysticks[i].effects); } -- 2.21.0