156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall/*
256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* Copyright (C) 2011 The Android Open Source Project
356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall*
456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* Licensed under the Apache License, Version 2.0 (the "License");
556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* you may not use this file except in compliance with the License.
656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* You may obtain a copy of the License at
756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall*
856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* http://www.apache.org/licenses/LICENSE-2.0
956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall*
1056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* Unless required by applicable law or agreed to in writing, software
1156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* distributed under the License is distributed on an "AS IS" BASIS,
1256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* See the License for the specific language governing permissions and
1456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* limitations under the License.
1556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall*/
1656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include "ThreadInfo.h"
1756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include "cutils/threads.h"
1856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall
1956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallthread_store_t s_tls = THREAD_STORE_INITIALIZER;
2056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall
2156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallstatic void tlsDestruct(void *ptr)
2256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{
2356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    if (ptr) {
2456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall        EGLThreadInfo *ti = (EGLThreadInfo *)ptr;
2556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall        delete ti->hostConn;
2656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall        delete ti;
2756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    }
2856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall}
2956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall
3056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse HallEGLThreadInfo *slow_getEGLThreadInfo()
3156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{
3256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    EGLThreadInfo *ti = (EGLThreadInfo *)thread_store_get(&s_tls);
3356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    if (ti) return ti;
3456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall
3556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    ti = new EGLThreadInfo();
3656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    thread_store_set(&s_tls, ti, tlsDestruct);
3756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall
3856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall    return ti;
3956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall}
40