test/testerror.c
author Ryan C. Gordon <icculus@icculus.org>
Thu, 01 Nov 2018 12:31:45 -0400
changeset 12382 03d0bddca61b
parent 11811 5d94cb6b24d3
child 12503 806492103856
permissions -rw-r--r--
merge fallout: Patched to compile, fixed some compiler warnings, etc.
     1 /*
     2   Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
     3 
     4   This software is provided 'as-is', without any express or implied
     5   warranty.  In no event will the authors be held liable for any damages
     6   arising from the use of this software.
     7 
     8   Permission is granted to anyone to use this software for any purpose,
     9   including commercial applications, and to alter it and redistribute it
    10   freely.
    11 */
    12 
    13 /* Simple test of the SDL threading code and error handling */
    14 
    15 #include <stdio.h>
    16 #include <stdlib.h>
    17 
    18 #include "SDL.h"
    19 
    20 static int alive = 0;
    21 
    22 /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
    23 static void
    24 quit(int rc)
    25 {
    26     SDL_Quit();
    27     exit(rc);
    28 }
    29 
    30 int SDLCALL
    31 ThreadFunc(void *data)
    32 {
    33     /* Set the child thread error string */
    34     SDL_SetError("Thread %s (%lu) had a problem: %s",
    35                  (char *) data, SDL_ThreadID(), "nevermind");
    36     while (alive) {
    37         SDL_Log("Thread '%s' is alive!\n", (char *) data);
    38         SDL_Delay(1 * 1000);
    39     }
    40     SDL_Log("Child thread error string: %s\n", SDL_GetError());
    41     return (0);
    42 }
    43 
    44 int
    45 main(int argc, char *argv[])
    46 {
    47     SDL_Thread *thread;
    48 
    49     /* Enable standard application logging */
    50     SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
    51 
    52     /* Load the SDL library */
    53     if (SDL_Init(0) < 0) {
    54         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError());
    55         return (1);
    56     }
    57 
    58     /* Set the error value for the main thread */
    59     SDL_SetError("No worries");
    60 
    61     alive = 1;
    62     thread = SDL_CreateThread(ThreadFunc, NULL, "#1");
    63     if (thread == NULL) {
    64         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread: %s\n", SDL_GetError());
    65         quit(1);
    66     }
    67     SDL_Delay(5 * 1000);
    68     SDL_Log("Waiting for thread #1\n");
    69     alive = 0;
    70     SDL_WaitThread(thread, NULL);
    71 
    72     SDL_Log("Main thread error string: %s\n", SDL_GetError());
    73 
    74     SDL_Quit();
    75     return (0);
    76 }