[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [UNIKRAFT/PTHREAD EMBEDDED PATCH v2 1/1] lib/pthread-embedded: Support for uksignal
Hi, Bernard
It looks good to me!
This patch is an update of the original.
v2: updated subject & authorship.
Signed-off-by: Mihai Pogonaru <pogonarumihai@xxxxxxxxx>
Signed-off-by: Teodora Serbanescu <teo.serbanescu16@xxxxxxxxx>
Signed-off-by: Felipe Huici <felipe.huici@xxxxxxxxx>
---
Makefile.uk | 2 ++
include/pte_osal.h | 8 +++++++
include/pte_types.h | 8 +++++++
...ead_kill_when_uk_signals_are_enabled.patch | 24 +++++++++++++++++++
pte_osal.c | 18 ++++++++++++++
5 files changed, 60 insertions(+)
create mode 100644 patches/0012-Add_pthread_kill_when_uk_signals_are_enabled.patch
diff --git a/Makefile.uk b/Makefile.uk
index 4ee37cd..2611c7d 100644
--- a/Makefile.uk
+++ b/Makefile.uk
@@ -65,7 +65,9 @@ LIBPTHREAD-EMBEDDED_CXXFLAGS-y += $(LIBPTHREAD-EMBEDDED_SUPPRESS_FLAGS)
LIBPTHREAD-EMBEDDED_SRCS-y += $(LIBPTHREAD-EMBEDDED_BASE)/pte_osal.c|glue
LIBPTHREAD-EMBEDDED_SRCS-y += $(LIBPTHREAD-EMBEDDED_BASE)/attributes.c|glue
LIBPTHREAD-EMBEDDED_SRCS-y += $(LIBPTHREAD-EMBEDDED_BASE)/pthread_atfork.c|glue
+ifneq ($(CONFIG_LIBUKSIGNAL),y)
LIBPTHREAD-EMBEDDED_SRCS-y += $(LIBPTHREAD-EMBEDDED_BASE)/pthread_sigmask.c|glue
+endif
LIBPTHREAD-EMBEDDED_SRCS-y += $(LIBPTHREAD-EMBEDDED_BASE)/pthread_condattr.c|glue
################################################################################
diff --git a/include/pte_osal.h b/include/pte_osal.h
index bcf5374..34122ea 100644
--- a/include/pte_osal.h
+++ b/include/pte_osal.h
@@ -4,10 +4,18 @@
#include <uk/mutex.h>
#include <uk/semaphore.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
typedef struct uk_thread* pte_osThreadHandle;
typedef struct uk_semaphore *pte_osSemaphoreHandle;
typedef struct uk_mutex *pte_osMutexHandle;
+#ifdef __cplusplus
+}
+#endif
+
#define OS_MAX_SIMUL_THREADS \
CONFIG_LIBPTHREAD_EMBEDDED_MAX_SIMUL_THREADS
diff --git a/include/pte_types.h b/include/pte_types.h
index c9081fa..817e313 100644
--- a/include/pte_types.h
+++ b/include/pte_types.h
@@ -3,8 +3,16 @@
#include <sys/timeb.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
typedef unsigned int tid_t;
typedef int pid_t;
+#ifdef __cplusplus
+}
+#endif
+
#endif /* __PTE_TYPES_H__ */
diff --git a/patches/0012-Add_pthread_kill_when_uk_signals_are_enabled.patch b/patches/0012-Add_pthread_kill_when_uk_signals_are_enabled.patch
new file mode 100644
index 0000000..cf30aca
--- /dev/null
+++ b/patches/0012-Add_pthread_kill_when_uk_signals_are_enabled.patch
@@ -0,0 +1,24 @@
+diff --git a/pthread_kill.c b/pthread_kill.c
+index 3a6daf6..4ea7448 100644
+--- a/pthread_kill.c
++++ b/pthread_kill.c
+@@ -47,7 +47,9 @@
+ #include "pthread.h"
+ #include "implement.h"
+
+-#ifdef __hermit__
++#include <uk/config.h>
++
++#if CONFIG_LIBUKSIGNAL
+ int pte_kill(pte_osThreadHandle threadId, int sig);
+ #endif
+
+@@ -98,7 +100,7 @@ pthread_kill (pthread_t thread, int sig)
+
+ pte_osMutexUnlock(pte_thread_reuse_lock);
+
+-#ifdef __hermit__
++#if CONFIG_LIBUKSIGNAL
+ result = pte_kill(tp->threadId, sig);
+ #else
+ if (0 == result && 0 != sig)
diff --git a/pte_osal.c b/pte_osal.c
index 640c3e4..0aac5fd 100644
--- a/pte_osal.c
+++ b/pte_osal.c
@@ -103,6 +103,19 @@ out:
return result;
}
+/***************************************************************************
+ *
+ * Signal handling
+ *
+ **************************************************************************/
+#if CONFIG_LIBUKSIGNAL
+int pte_kill(pte_osThreadHandle threadId, int sig)
+{
+ return uk_sig_thread_kill(threadId, sig);
+}
+#endif
+
+
/****************************************************************************
*
* Threads
@@ -162,6 +175,11 @@ pte_osResult pte_osThreadCreate(pte_osThreadEntryPoint entry_point,
return PTE_OS_NO_RESOURCES;
}
+#if CONFIG_LIBUKSIGNAL
+ /* inherit signal mask */
+ ptd->uk_thread->signals_container.mask = uk_thread_current()->signals_container.mask;
+#endif
+
ptd->uk_thread->prv = ptd;
*ph = ptd->uk_thread;
--
2.25.1
|