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