Mercurial > sdl-ios-xcode
view test/automated/audio/audio.c @ 5126:d79ff339d1f2
Fixed bug #1056 (Frequent crashes in Touch events by simply touching the screen)
Joseba GarcĂa Echebarria 2010-12-15 01:55:22 PST
I believe the crash is caused by a check not being performed on wether an
SDL_Touch element is NULL before using it in the SDL_SendTouchMotion function
in src/events/SDL_touch.c around line 400.
Judging from the rest of the code, there's a missing
if (!touch) {
return 0;
}
before using "touch" as SDL_GetFinger(), SDL_GetFingerIndexId() use
touch->num_fingers without checking.
I can attach a patch if you like. It seems pretty straightforward, though.
I have yet to discover why touch is being returned as NULL as this error is
only triggered when an actual gesture has been performed, maybe something
related to SDL_AddTouch()?
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Fri, 28 Jan 2011 10:21:58 -0800 |
parents | c32c53fca10d |
children |
line wrap: on
line source
/** * Automated SDL_RWops test. * * Written by Edgar Simo "bobbens" * * Released under Public Domain. */ #include "SDL.h" #include "../SDL_at.h" /** * @brief Prints available devices. */ static int audio_printDevices( int iscapture ) { int i, n; /* Get number of devices. */ n = SDL_GetNumAudioDevices(iscapture); SDL_ATprintVerbose( 1, "%d %s Audio Devices\n", n, iscapture ? "Capture" : "Output" ); /* List devices. */ for (i=0; i<n; i++) { SDL_ATprintVerbose( 1, " %d) %s\n", i+1, SDL_GetAudioDeviceName( i, iscapture ) ); } return 0; } /** * @brief Makes sure parameters work properly. */ static void audio_testOpen (void) { int i, n; int ret; /* Begin testcase. */ SDL_ATbegin( "Audio Open" ); /* List drivers. */ n = SDL_GetNumAudioDrivers(); SDL_ATprintVerbose( 1, "%d Audio Drivers\n", n ); for (i=0; i<n; i++) { SDL_ATprintVerbose( 1, " %s\n", SDL_GetAudioDriver(i) ); } /* Start SDL. */ ret = SDL_Init( SDL_INIT_AUDIO ); if (SDL_ATvassert( ret==0, "SDL_Init( SDL_INIT_AUDIO ): %s", SDL_GetError())) return; /* Print devices. */ SDL_ATprintVerbose( 1, "Using Audio Driver '%s'\n", SDL_GetCurrentAudioDriver() ); audio_printDevices(0); audio_printDevices(1); /* Quit SDL. */ SDL_Quit(); /* End testcase. */ SDL_ATend(); } /** * @brief Entry point. */ #ifdef TEST_STANDALONE int main( int argc, const char *argv[] ) { (void) argc; (void) argv; #else /* TEST_STANDALONE */ int test_audio (void) { #endif /* TEST_STANDALONE */ SDL_ATinit( "SDL_Audio" ); audio_testOpen(); return SDL_ATfinish(); }