src/thread/SDL_thread_c.h
author Sam Lantinga <slouken@libsdl.org>
Mon, 22 Jun 2015 23:36:06 -0700
changeset 9776 952ff8a5076f
parent 9619 b94b6d0bff0f
child 9998 f67cf37e9cd4
permissions -rw-r--r--
Fixed bug 3030 - SDL_RecreateWindow fails to restore title, icon, etc.

Adam M.

It loses the title and icon when window recreation fails. For instance, this may happen when trying to create an OpenGL ES window on a system that doesn't support it. But at that point, the title and icon have already been lost.
slouken@0
     1
/*
slouken@5535
     2
  Simple DirectMedia Layer
slouken@9619
     3
  Copyright (C) 1997-2015 Sam Lantinga <slouken@libsdl.org>
slouken@0
     4
slouken@5535
     5
  This software is provided 'as-is', without any express or implied
slouken@5535
     6
  warranty.  In no event will the authors be held liable for any damages
slouken@5535
     7
  arising from the use of this software.
slouken@0
     8
slouken@5535
     9
  Permission is granted to anyone to use this software for any purpose,
slouken@5535
    10
  including commercial applications, and to alter it and redistribute it
slouken@5535
    11
  freely, subject to the following restrictions:
slouken@0
    12
slouken@5535
    13
  1. The origin of this software must not be misrepresented; you must not
slouken@5535
    14
     claim that you wrote the original software. If you use this software
slouken@5535
    15
     in a product, an acknowledgment in the product documentation would be
slouken@5535
    16
     appreciated but is not required.
slouken@5535
    17
  2. Altered source versions must be plainly marked as such, and must not be
slouken@5535
    18
     misrepresented as being the original software.
slouken@5535
    19
  3. This notice may not be removed or altered from any source distribution.
slouken@0
    20
*/
icculus@8093
    21
#include "../SDL_internal.h"
slouken@0
    22
slouken@0
    23
#ifndef _SDL_thread_c_h
slouken@0
    24
#define _SDL_thread_c_h
slouken@0
    25
slouken@7730
    26
#include "SDL_thread.h"
slouken@7730
    27
slouken@1361
    28
/* Need the definitions of SYS_ThreadHandle */
slouken@1361
    29
#if SDL_THREADS_DISABLED
slouken@1361
    30
#include "generic/SDL_systhread_c.h"
slouken@1361
    31
#elif SDL_THREAD_PTHREAD
slouken@1361
    32
#include "pthread/SDL_systhread_c.h"
slouken@5062
    33
#elif SDL_THREAD_WINDOWS
slouken@5062
    34
#include "windows/SDL_systhread_c.h"
kimonline@7009
    35
#elif SDL_THREAD_PSP
kimonline@7009
    36
#include "psp/SDL_systhread_c.h"
dludwig@8356
    37
#elif SDL_THREAD_STDCPP
dludwig@8356
    38
#include "stdcpp/SDL_systhread_c.h"
slouken@1361
    39
#else
slouken@1361
    40
#error Need thread implementation for this platform
slouken@1361
    41
#include "generic/SDL_systhread_c.h"
slouken@1361
    42
#endif
slouken@1361
    43
#include "../SDL_error_c.h"
slouken@0
    44
icculus@7978
    45
typedef enum SDL_ThreadState
icculus@7978
    46
{
icculus@7978
    47
    SDL_THREAD_STATE_ALIVE,
icculus@7978
    48
    SDL_THREAD_STATE_DETACHED,
icculus@7978
    49
    SDL_THREAD_STATE_ZOMBIE,
icculus@7978
    50
    SDL_THREAD_STATE_CLEANED,
icculus@7978
    51
} SDL_ThreadState;
icculus@7978
    52
slouken@0
    53
/* This is the system-independent thread info structure */
slouken@1895
    54
struct SDL_Thread
slouken@1895
    55
{
slouken@3578
    56
    SDL_threadID threadid;
slouken@1895
    57
    SYS_ThreadHandle handle;
slouken@1895
    58
    int status;
icculus@7978
    59
    SDL_atomic_t state;  /* SDL_THREAD_STATE_* */
slouken@1895
    60
    SDL_error errbuf;
icculus@5969
    61
    char *name;
slouken@1895
    62
    void *data;
slouken@0
    63
};
slouken@0
    64
slouken@0
    65
/* This is the function called to run a thread */
slouken@0
    66
extern void SDL_RunThread(void *data);
slouken@0
    67
slouken@7393
    68
/* This is the system-independent thread local storage structure */
slouken@7393
    69
typedef struct {
icculus@7482
    70
    unsigned int limit;
slouken@7393
    71
    struct {
slouken@7393
    72
        void *data;
slouken@7393
    73
        void (*destructor)(void*);
slouken@7393
    74
    } array[1];
slouken@7393
    75
} SDL_TLSData;
slouken@7393
    76
slouken@7393
    77
/* This is how many TLS entries we allocate at once */
slouken@7393
    78
#define TLS_ALLOC_CHUNKSIZE 4
slouken@7393
    79
slouken@7393
    80
/* Get cross-platform, slow, thread local storage for this thread.
slouken@7393
    81
   This is only intended as a fallback if getting real thread-local
slouken@7393
    82
   storage fails or isn't supported on this platform.
slouken@7393
    83
 */
slouken@7393
    84
extern SDL_TLSData *SDL_Generic_GetTLSData();
slouken@7393
    85
slouken@7393
    86
/* Set cross-platform, slow, thread local storage for this thread.
slouken@7393
    87
   This is only intended as a fallback if getting real thread-local
slouken@7393
    88
   storage fails or isn't supported on this platform.
slouken@7393
    89
 */
slouken@7393
    90
extern int SDL_Generic_SetTLSData(SDL_TLSData *data);
slouken@7393
    91
slouken@0
    92
#endif /* _SDL_thread_c_h */
slouken@6044
    93
slouken@1895
    94
/* vi: set ts=4 sw=4 expandtab: */