diff options
author | jb <jb@FreeBSD.org> | 1998-04-11 07:47:22 +0000 |
---|---|---|
committer | jb <jb@FreeBSD.org> | 1998-04-11 07:47:22 +0000 |
commit | 19185ac5121f9f5c12adb893404acf3e8c9db6d4 (patch) | |
tree | d3cd2f1400e0868d686f6f4a6969a4e33d538f1c /lib/libkse/thread/thr_info.c | |
parent | 0ff63017b40dda207b2aadc9881e0c93e7fd2753 (diff) | |
download | FreeBSD-src-19185ac5121f9f5c12adb893404acf3e8c9db6d4.zip FreeBSD-src-19185ac5121f9f5c12adb893404acf3e8c9db6d4.tar.gz |
Change the FILE locking to be by FILE, not by the underlying fd as
it was. Add a FILE_WAIT state and queue threads waiting for a FILE
lock. Start using the sys/queue.h macros instead of the way that MIT
pthreads did it.
Add a thread name to the private thread structure and a non-POSIX
function to set this. This helps (me at least) when sending a SIGINFO
to a threaded process to get a /tmp/uthread.dump to see what the
<expletive deleted> threads are doing this time. It is nice to be
able to recognise (yes, I spell that with an 's' too) which threads
are which.
Diffstat (limited to 'lib/libkse/thread/thr_info.c')
-rw-r--r-- | lib/libkse/thread/thr_info.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/lib/libkse/thread/thr_info.c b/lib/libkse/thread/thr_info.c index be25d45..fe6565b 100644 --- a/lib/libkse/thread/thr_info.c +++ b/lib/libkse/thread/thr_info.c @@ -52,7 +52,8 @@ static const struct s_thread_info thread_info[] = { {PS_FDLR_WAIT , "Waiting for a file read lock"}, {PS_FDLW_WAIT , "Waiting for a file write lock"}, {PS_FDR_WAIT , "Waiting for read"}, - {PS_FDW_WAIT , "Waitingfor write"}, + {PS_FDW_WAIT , "Waiting for write"}, + {PS_FILE_WAIT , "Waiting for FILE lock"}, {PS_SELECT_WAIT , "Waiting on select"}, {PS_SLEEP_WAIT , "Sleeping"}, {PS_WAIT_WAIT , "Waiting process"}, @@ -87,8 +88,8 @@ _thread_dump_info(void) if (thread_info[j].state == pthread->state) break; /* Output a record for the current thread: */ - sprintf(s, "--------------------\nThread %p prio %3d state %s [%s:%d]\n", - pthread, pthread->pthread_priority, thread_info[j].name,pthread->fname,pthread->lineno); + sprintf(s, "--------------------\nThread %p (%s) prio %3d state %s [%s:%d]\n", + pthread, (pthread->name == NULL) ? "":pthread->name, pthread->pthread_priority, thread_info[j].name,pthread->fname,pthread->lineno); _thread_sys_write(fd, s, strlen(s)); /* Check if this is the running thread: */ @@ -105,7 +106,7 @@ _thread_dump_info(void) } /* Process according to thread state: */ switch (pthread->state) { - /* File descriptor read lock wait: */ + /* File descriptor read lock wait: */ case PS_FDLR_WAIT: case PS_FDLW_WAIT: case PS_FDR_WAIT: @@ -117,10 +118,10 @@ _thread_dump_info(void) _thread_sys_write(fd, s, strlen(s)); break; - /* - * Trap other states that are not explicitly - * coded to dump information: - */ + /* + * Trap other states that are not explicitly + * coded to dump information: + */ default: /* Nothing to do here. */ break; @@ -179,4 +180,14 @@ _thread_dump_info(void) } return; } + +/* Set the thread name for debug: */ +void +pthread_set_name_np(pthread_t thread, char *name) +{ + /* Check if the caller has specified a valid thread: */ + if (thread != NULL && thread->magic == PTHREAD_MAGIC) + thread->name = strdup(name); + return; +} #endif |