129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju/* 229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * Copyright (C) 2016 The Android Open Source Project 329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * 429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * Licensed under the Apache License, Version 2.0 (the "License"); 529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * you may not use this file except in compliance with the License. 629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * You may obtain a copy of the License at 729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * 829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * http://www.apache.org/licenses/LICENSE-2.0 929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * 1029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * Unless required by applicable law or agreed to in writing, software 1129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * distributed under the License is distributed on an "AS IS" BASIS, 1229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * See the License for the specific language governing permissions and 1429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju * limitations under the License. 1529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju */ 1629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 1729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju#include <ThreadCreationWrapper.h> 1829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 1929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsarajuvoid* threadFunc(void* arg) { 2029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju ThreadFuncArgs* threadArgs = reinterpret_cast<ThreadFuncArgs*>(arg); 2129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju threadArgs->fptr(threadArgs->args); 2229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju return nullptr; 2329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} 2429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 2529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsarajupthread_t createPthread(const char* name, 2629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju void (*start)(void*), 2729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju void* arg, std::vector<std::unique_ptr<ThreadFuncArgs>> * listArgs) { 2829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju pthread_t threadId; 2929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju auto threadArgs = new ThreadFuncArgs(start, arg); 3029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju auto argPtr = std::unique_ptr<ThreadFuncArgs>(threadArgs); 3129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 3229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju listArgs->push_back(std::move(argPtr)); 3329dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju 3429dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju int ret = pthread_create(&threadId, nullptr, threadFunc, reinterpret_cast<void*>( 3529dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju threadArgs)); 3629dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju if (ret != 0) { 3729dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju ALOGE("pthread creation unsuccessful"); 3829dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } else { 3929dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju pthread_setname_np(threadId, name); 4029dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju } 4129dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju return threadId; 4229dc1e0c724283413fdd13d68ac9751591baa3c5Hridya Valsaraju} 43