[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tyndur-devel] [PATCH 01/11] kernel2: pm_thread_get()
+ kernel2: Funktion, um Threads anhand von Prozess und TID zu suchen
Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
src/kernel2/include/tasks.h | 3 ++
src/kernel2/src/tasks/thread.c | 53 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 56 insertions(+), 0 deletions(-)
diff --git a/src/kernel2/include/tasks.h b/src/kernel2/include/tasks.h
index f31b4b6..7bcebb3 100644
--- a/src/kernel2/include/tasks.h
+++ b/src/kernel2/include/tasks.h
@@ -202,6 +202,9 @@ void pm_thread_destroy(pm_thread_t* thread);
/// Thread blockieren
bool pm_thread_block(pm_thread_t* thread);
+/// Thread anhand der TID (und ggf. Prozess) suchen
+pm_thread_t* pm_thread_get(pm_process_t* process, tid_t tid);
+
/// Thread entblocken
bool pm_thread_unblock(pm_thread_t* thread);
diff --git a/src/kernel2/src/tasks/thread.c b/src/kernel2/src/tasks/thread.c
index 961fe31..b916e74 100644
--- a/src/kernel2/src/tasks/thread.c
+++ b/src/kernel2/src/tasks/thread.c
@@ -203,6 +203,59 @@ void pm_thread_destroy(pm_thread_t* thread)
}
/**
+ * Thread innerhalb eines Prozesses suchen
+ *
+ * @process Prozess, zu dem der gesuchte Thread gehört
+ * @tid Thread-ID des Threads
+ *
+ * @return Der Thread mit der passenden TID, oder NULL, wenn der Thread nicht
+ * existiert oder nicht zum gegebenen Prozess gehört.
+ */
+static pm_thread_t* pm_thread_get_in_proc(pm_process_t* process, tid_t tid)
+{
+ pm_thread_t* thread;
+ int i;
+
+ for (i = 0; (thread = list_get_element_at(process->threads, i)); i++) {
+ if (thread->tid == tid) {
+ return thread;
+ }
+ }
+
+ return NULL;
+}
+
+/**
+ * Thread anhand der TID suchen
+ *
+ * @process Prozess, zu dem der gesuchte Thread gehört, oder NULL, wenn in
+ * allen Prozessen gesucht werden soll
+ *
+ * @tid Thread-ID des Threads
+ *
+ * @return Der Thread mit der passenden TID, oder NULL, wenn der Thread nicht
+ * existiert oder nicht zum gegebenen Prozess gehört.
+ */
+pm_thread_t* pm_thread_get(pm_process_t* process, tid_t tid)
+{
+ pm_thread_t* thread;
+ int i;
+
+ if (process) {
+ return pm_thread_get_in_proc(process, tid);
+ }
+
+ for (i = 0; (process = list_get_element_at(process_list, i)); i++) {
+ thread = pm_thread_get_in_proc(process, tid);
+ if (thread) {
+ return thread;
+ }
+ }
+
+ return NULL;
+}
+
+/**
* Thread blockieren
*
* @param thread Pointer auf die Thread-Struktur
--
1.7.7