の主な機能はSDL_Init()
エラー処理のようです (さまざまなサブシステムの初期化以外)。ソースから、SDL_Init()
以下の関数を呼び出します。
void SDL_InstallParachute(void)
{
/* Set a handler for any fatal signal not already handled */
int i;
#ifdef HAVE_SIGACTION
struct sigaction action;
for ( i=0; SDL_fatal_signals[i]; ++i ) {
sigaction(SDL_fatal_signals[i], NULL, &action);
if ( action.sa_handler == SIG_DFL ) {
action.sa_handler = SDL_Parachute;
sigaction(SDL_fatal_signals[i], &action, NULL);
}
}
#ifdef SIGALRM
/* Set SIGALRM to be ignored -- necessary on Solaris */
sigaction(SIGALRM, NULL, &action);
if ( action.sa_handler == SIG_DFL ) {
action.sa_handler = SIG_IGN;
sigaction(SIGALRM, &action, NULL);
}
#endif
#else
void (*ohandler)(int);
for ( i=0; SDL_fatal_signals[i]; ++i ) {
ohandler = signal(SDL_fatal_signals[i], SDL_Parachute);
if ( ohandler != SIG_DFL ) {
signal(SDL_fatal_signals[i], ohandler);
}
}
#endif /* HAVE_SIGACTION */
return;
}
この関数は、初期化されたサブシステムが処理していないように見える実行時エラーを処理できるセーフティ ネットを設定します。これはおそらく、サブシステムによって処理されないため、アプリケーションを終了するときに発生するランタイム エラーを説明しています。
つまり、開発者が安全のためにライブラリの初期化メソッドが呼び出されることを期待している場合は、常にライブラリの初期化メソッドを呼び出す必要があります。