py/modthread: Return thread id from start_new_thread().
In CPython, `_thread.start_new_thread()` returns an ID that is the same ID that is returned by `_thread.get_ident()`. The current MicroPython implementation of `_thread.start_new_thread()` always returns `None`. This modifies the required functions to return a value. The native thread id is returned since this can be used for interop with other functions, for example, `pthread_kill()` on *nix. `_thread.get_ident()` is also modified to return the native thread id so that the values match and avoids the need for a separate `native_id` attribute. Fixes issue #12153. Signed-off-by: David Lechner <david@pybricks.com>
This commit is contained in:
committed by
Damien George
parent
c0d4c604e6
commit
ffb43b2dd3
@@ -98,6 +98,10 @@ void mp_thread_set_state(mp_state_thread_t *state) {
|
||||
vTaskSetThreadLocalStoragePointer(NULL, 1, state);
|
||||
}
|
||||
|
||||
mp_uint_t mp_thread_get_id(void) {
|
||||
return (mp_uint_t)xTaskGetCurrentTaskHandle();
|
||||
}
|
||||
|
||||
void mp_thread_start(void) {
|
||||
mp_thread_mutex_lock(&thread_mutex, 1);
|
||||
for (mp_thread_t *th = thread; th != NULL; th = th->next) {
|
||||
@@ -120,7 +124,7 @@ STATIC void freertos_entry(void *arg) {
|
||||
}
|
||||
}
|
||||
|
||||
void mp_thread_create_ex(void *(*entry)(void *), void *arg, size_t *stack_size, int priority, char *name) {
|
||||
mp_uint_t mp_thread_create_ex(void *(*entry)(void *), void *arg, size_t *stack_size, int priority, char *name) {
|
||||
// store thread entry function into a global variable so we can access it
|
||||
ext_thread_entry = entry;
|
||||
|
||||
@@ -154,10 +158,12 @@ void mp_thread_create_ex(void *(*entry)(void *), void *arg, size_t *stack_size,
|
||||
*stack_size -= 1024;
|
||||
|
||||
mp_thread_mutex_unlock(&thread_mutex);
|
||||
|
||||
return (mp_uint_t)th->id;
|
||||
}
|
||||
|
||||
void mp_thread_create(void *(*entry)(void *), void *arg, size_t *stack_size) {
|
||||
mp_thread_create_ex(entry, arg, stack_size, MP_THREAD_PRIORITY, "mp_thread");
|
||||
mp_uint_t mp_thread_create(void *(*entry)(void *), void *arg, size_t *stack_size) {
|
||||
return mp_thread_create_ex(entry, arg, stack_size, MP_THREAD_PRIORITY, "mp_thread");
|
||||
}
|
||||
|
||||
void mp_thread_finish(void) {
|
||||
|
||||
Reference in New Issue
Block a user