issue #3996: impl gettid for macOS & cygwin64.

pull/3997/head
Jacob Su 12 months ago
parent 954b1b7ef2
commit bb4a332f44

2
trunk/configure vendored

@ -464,7 +464,7 @@ if [[ $SRS_UTEST == YES ]]; then
MODULE_FILES=("srs_utest" "srs_utest_amf0" "srs_utest_kernel" "srs_utest_core"
"srs_utest_config" "srs_utest_rtmp" "srs_utest_http" "srs_utest_avc" "srs_utest_reload"
"srs_utest_mp4" "srs_utest_service" "srs_utest_app" "srs_utest_rtc" "srs_utest_config2"
"srs_utest_protocol" "srs_utest_protocol2" "srs_utest_kernel2")
"srs_utest_protocol" "srs_utest_protocol2" "srs_utest_kernel2" "srs_utest_thread_pool")
if [[ $SRS_SRT == YES ]]; then
MODULE_FILES+=("srs_utest_srt")
fi

@ -36,7 +36,12 @@ using namespace std;
#include <unistd.h>
#include <fcntl.h>
#if defined(SRS_OSX) || defined(SRS_CYGWIN64)
#if defined(SRS_OSX)
pid_t gettid() {
uint64_t tid;
return pthread_threadid_np(NULL, &tid) ? 0 : tid;
}
#elif defined(SRS_CYGWIN64)
pid_t gettid() {
return 0;
}
@ -550,6 +555,12 @@ SrsThreadPool::~SrsThreadPool()
::close(pid_fd);
pid_fd = -1;
}
while(!threads_.empty()) {
SrsThreadEntry* entry = threads_.back();
srs_freep(entry);
threads_.pop_back();
}
}
// Setup the thread-local variables, MUST call when each thread starting.
@ -799,6 +810,7 @@ void* SrsThreadPool::start(void* arg)
entry->err = srs_error_new(ERROR_THREAD_FINISHED, "finished normally");
}
srs_st_destroy();
// We do not use the return value, the err has been set to entry->err.
return NULL;
}

@ -0,0 +1,58 @@
//
// Copyright (c) 2013-2024 The SRS Authors
//
// SPDX-License-Identifier: MIT
//
#include <srs_utest_thread_pool.hpp>
#include <pthread.h>
static srs_error_t dummy_loop(void*) {
return srs_success;
}
#ifndef SRS_CYGWIN64
VOID TEST(ThreadPoolTest, tid) {
#if 0
srs_error_t err;
SrsThreadPool* thread_pool_1 = new SrsThreadPool();
SrsThreadPool* thread_pool_2 = new SrsThreadPool();
EXPECT_TRUE((err = thread_pool_1->initialize()) == srs_success);
srs_freep(err);
EXPECT_TRUE((err = thread_pool_2->initialize()) == srs_success);
srs_freep(err);
EXPECT_TRUE((err = thread_pool_1->execute("hybrid", dummy_loop, (void*)NULL)) == srs_success);
srs_freep(err);
EXPECT_TRUE((err = thread_pool_2->execute("hybrid", dummy_loop, (void*)NULL)) == srs_success);
srs_freep(err);
err = thread_pool_1->run();
srs_freep(err);
err = thread_pool_2->run();
srs_freep(err);
EXPECT_GT(thread_pool_1->hybrid()->tid, 0);
EXPECT_GT(thread_pool_2->hybrid()->tid, 0);
EXPECT_NE(thread_pool_1->hybrid()->tid, thread_pool_2->hybrid()->tid);
srs_freep(thread_pool_1);
srs_freep(thread_pool_2);
#endif
srs_error_t err;
EXPECT_TRUE((err = _srs_thread_pool->initialize()) == srs_success);
srs_freep(err);
//EXPECT_TRUE((err = _srs_thread_pool->execute("hybrid", dummy_loop, (void*)NULL)) == srs_success);
//srs_freep(err);
//err = _srs_thread_pool->run();
srs_freep(err);
}
#endif

@ -0,0 +1,15 @@
//
// Copyright (c) 2013-2024 The SRS Authors
//
// SPDX-License-Identifier: MIT
//
#ifndef SRS_UTEST_THREAD_POOL
#define SRS_UTEST_THREAD_POOL
#include <srs_utest.hpp>
#include <srs_app_threads.hpp>
#endif // SRS_UTEST_THREAD_POOL
Loading…
Cancel
Save