← Commit list

67c75b6712

Patrick Monnerat
Patrick Monnerat
2025-10-10
SUCCESS Duration: 197s

Subject

os400: document threads handling in code.

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

packages/OS400/os400sys.c+19 -3
@@ -158,6 +158,11 @@ get_buffer(struct buffer_t *buf, long size)
}
+/*
+ * Get buffer address for the given local key.
+ * This is always called though `Curl_thread_buffer' and when threads are
+ * NOT made available by the os, so no mutex lock/unlock occurs.
+ */
static char *
buffer_unthreaded(localkey_t key, long size)
{
@@ -165,6 +170,12 @@ buffer_unthreaded(localkey_t key, long size)
}
+/*
+ * Get buffer address for the given local key, taking care of
+ * concurrent threads.
+ * This is always called though `Curl_thread_buffer' and when threads are
+ * made available by the os.
+ */
static char *
buffer_threaded(localkey_t key, long size)
{
@@ -208,16 +219,21 @@ buffer_undef(localkey_t key, long size)
/* Determine if we can use pthread-specific data. */
if(Curl_thread_buffer == buffer_undef) { /* If unchanged during lock. */
- if(!pthread_key_create(&thdkey, thdbufdestroy))
+ /* OS400 interactive jobs do not support threads: check here. */
+ if(!pthread_key_create(&thdkey, thdbufdestroy)) {
+ /* Threads are supported: use the thread-aware buffer procedure. */
Curl_thread_buffer = buffer_threaded;
+ }
else {
+ /* No multi-threading available: allocate storage for single-thread
+ * buffer headers. */
locbufs = calloc((size_t) LK_LAST, sizeof(*locbufs));
if(!locbufs) {
- pthread_mutex_unlock(&mutex);
+ pthread_mutex_unlock(&mutex); /* For symetry: will probably fail. */
return (char *) NULL;
}
else
- Curl_thread_buffer = buffer_unthreaded;
+ Curl_thread_buffer = buffer_unthreaded; /* Use unthreaded version. */
}
atexit(terminate);