Changes in / [c8680be4:0ae9e18] in mainline


Ignore:
Location:
uspace/lib
Files:
1 deleted
5 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/libc.c

    rc8680be4 r0ae9e18  
    8181                main_fibril.tcb = tls_make_initial(__progsymbols.elfstart);
    8282        }
    83         main_fibril.is_freeable = false;
    8483
    8584        assert(main_fibril.tcb);
  • uspace/lib/c/generic/rtld/symbol.c

    rc8680be4 r0ae9e18  
    6565static elf_symbol_t *def_find_in_module(const char *name, module_t *m)
    6666{
    67         if (m->dyn.hash == NULL) {
    68                 /* No hash table */
    69                 return NULL;
    70         }
    71 
    7267        elf_symbol_t *sym_table;
    7368        elf_symbol_t *s, *sym;
  • uspace/lib/posix/meson.build

    rc8680be4 r0ae9e18  
    3030includes += include_directories('include/posix', 'include')
    3131c_args += [ '-fno-builtin', '-D_XOPEN_SOURCE' ]
    32 allow_shared = true
    3332
    3433# TODO
     
    6261        'test/stdlib.c',
    6362        'test/unistd.c',
    64         'test/pthread/keys.c',
    6563)
    6664
  • uspace/lib/posix/src/pthread/keys.c

    rc8680be4 r0ae9e18  
    3636#include <pthread.h>
    3737#include <errno.h>
    38 #include <fibril.h>
    39 #include <stdatomic.h>
    4038#include "../internal/common.h"
    41 
    42 #include <stdio.h>
    43 #define DPRINTF(format, ...) ((void) 0);
    44 
    45 static fibril_local bool fibril_initialized = false;
    46 static atomic_ushort next_key = 1; // skip the key 'zero'
    47 
    48 /*
    49  * For now, we just support maximum of 100 keys. This can be improved
    50  * in the future by implementing a dynamically growing array with
    51  * reallocations, but that will require more synchronization.
    52  */
    53 #define PTHREAD_KEYS_MAX 100
    54 
    55 static fibril_local void *key_data[PTHREAD_KEYS_MAX];
    5639
    5740void *pthread_getspecific(pthread_key_t key)
    5841{
    59         // initialization is done in setspecific -> if not initialized, nothing was set yet
    60         if (!fibril_initialized) {
    61                 DPRINTF("pthread_getspecific(%d) = NULL (uninitialized)\n", key);
    62                 return NULL;
    63         }
    64 
    65         assert(key < PTHREAD_KEYS_MAX);
    66         assert(key < next_key);
    67         assert(key > 0);
    68 
    69         DPRINTF("pthread_getspecific(%d) = %p\n", key, key_data[key]);
    70         return key_data[key];
     42        not_implemented();
     43        return NULL;
    7144}
    7245
    7346int pthread_setspecific(pthread_key_t key, const void *data)
    7447{
    75         DPRINTF("pthread_setspecific(%d, %p)\n", key, data);
    76         if (!fibril_initialized) {
    77                 DPRINTF("initializing pthread keys\n");
    78                 for (unsigned i = 0; i < PTHREAD_KEYS_MAX; i++) {
    79                         key_data[i] = NULL;
    80                 }
    81                 fibril_initialized = true;
    82         }
    83         assert(key < PTHREAD_KEYS_MAX);
    84         assert(key < next_key);
    85         assert(key > 0);
    86 
    87         key_data[key] = (void *) data;
    88         return EOK;
     48        not_implemented();
     49        return ENOTSUP;
    8950}
    9051
    9152int pthread_key_delete(pthread_key_t key)
    9253{
    93         // see https://github.com/HelenOS/helenos/pull/245#issuecomment-2706795848
    9454        not_implemented();
    95         return EOK;
     55        return ENOTSUP;
    9656}
    9757
    9858int pthread_key_create(pthread_key_t *key, void (*destructor)(void *))
    9959{
    100         unsigned short k = atomic_fetch_add(&next_key, 1);
    101         DPRINTF("pthread_key_create(%p, %p) = %d\n", key, destructor, k);
    102         if (k >= PTHREAD_KEYS_MAX) {
    103                 atomic_store(&next_key, PTHREAD_KEYS_MAX + 1);
    104                 return ELIMIT;
    105         }
    106         if (destructor != NULL) {
    107                 static int __counter = 0;
    108                 if (__counter == 0) {
    109                         fprintf(stderr, "pthread_key_create: destructors not supported\n");
    110                 }
    111                 __counter++;
    112         }
    113 
    114         *key = k;
    115         return EOK;
     60        not_implemented();
     61        return ENOTSUP;
    11662}
    11763
  • uspace/lib/posix/test/main.c

    rc8680be4 r0ae9e18  
    3434PCUT_IMPORT(stdlib);
    3535PCUT_IMPORT(unistd);
    36 PCUT_IMPORT(pthread_keys);
    3736
    3837PCUT_MAIN();
Note: See TracChangeset for help on using the changeset viewer.