[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