Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/include/fibril_synch.h

    rbc56f30 r25f6bddb  
    3333 */
    3434
    35 #ifndef _LIBC_FIBRIL_SYNCH_H_
    36 #define _LIBC_FIBRIL_SYNCH_H_
     35#ifndef LIBC_FIBRIL_SYNCH_H_
     36#define LIBC_FIBRIL_SYNCH_H_
    3737
    3838#include <fibril.h>
    3939#include <adt/list.h>
     40#include <tls.h>
    4041#include <time.h>
    4142#include <stdbool.h>
    42 #include <_bits/decls.h>
    43 
    44 #ifndef __cplusplus
     43
     44typedef struct {
     45        fibril_owner_info_t oi;  /**< Keep this the first thing. */
     46        int counter;
     47        list_t waiters;
     48} fibril_mutex_t;
    4549
    4650#define FIBRIL_MUTEX_INITIALIZER(name) \
     
    5054                }, \
    5155                .counter = 1, \
    52                 .waiters = LIST_INITIALIZER((name).waiters), \
     56                .waiters = { \
     57                        .head = { \
     58                                .prev = &(name).waiters.head, \
     59                                .next = &(name).waiters.head, \
     60                        } \
     61                } \
    5362        }
    5463
    5564#define FIBRIL_MUTEX_INITIALIZE(name) \
    5665        fibril_mutex_t name = FIBRIL_MUTEX_INITIALIZER(name)
     66
     67typedef struct {
     68        fibril_owner_info_t oi;  /**< Keep this the first thing. */
     69        unsigned int writers;
     70        unsigned int readers;
     71        list_t waiters;
     72} fibril_rwlock_t;
    5773
    5874#define FIBRIL_RWLOCK_INITIALIZER(name) \
     
    6379                .readers = 0, \
    6480                .writers = 0, \
    65                 .waiters = LIST_INITIALIZER((name).waiters), \
     81                .waiters = { \
     82                        .head = { \
     83                                .prev = &(name).waiters.head, \
     84                                .next = &(name).waiters.head, \
     85                        } \
     86                } \
    6687        }
    6788
     
    6990        fibril_rwlock_t name = FIBRIL_RWLOCK_INITIALIZER(name)
    7091
     92typedef struct {
     93        list_t waiters;
     94} fibril_condvar_t;
     95
    7196#define FIBRIL_CONDVAR_INITIALIZER(name) \
    7297        { \
    73                 .waiters = LIST_INITIALIZER((name).waiters), \
     98                .waiters = { \
     99                        .head = { \
     100                                .next = &(name).waiters.head, \
     101                                .prev = &(name).waiters.head, \
     102                        } \
     103                } \
    74104        }
    75105
    76106#define FIBRIL_CONDVAR_INITIALIZE(name) \
    77107        fibril_condvar_t name = FIBRIL_CONDVAR_INITIALIZER(name)
    78 
    79 #define FIBRIL_SEMAPHORE_INITIALIZER(name, cnt) \
    80         { \
    81                 .count = (cnt), \
    82                 .waiters = LIST_INITIALIZER((name).waiters), \
    83         }
    84 
    85 #define FIBRIL_SEMAPHORE_INITIALIZE(name, cnt) \
    86         fibril_semaphore_t name = FIBRIL_SEMAPHORE_INITIALIZER(name, cnt)
    87 
    88 #endif
    89 
    90 __HELENOS_DECLS_BEGIN;
    91 
    92 typedef struct {
    93         fibril_owner_info_t oi;  /**< Keep this the first thing. */
    94         int counter;
    95         list_t waiters;
    96 } fibril_mutex_t;
    97 
    98 typedef struct {
    99         fibril_owner_info_t oi;  /**< Keep this the first thing. */
    100         unsigned int writers;
    101         unsigned int readers;
    102         list_t waiters;
    103 } fibril_rwlock_t;
    104 
    105 typedef struct {
    106         list_t waiters;
    107 } fibril_condvar_t;
    108108
    109109typedef void (*fibril_timer_fun_t)(void *);
     
    150150} fibril_semaphore_t;
    151151
     152#define FIBRIL_SEMAPHORE_INITIALIZER(name, cnt) \
     153        { \
     154                .count = (cnt), \
     155                .waiters = { \
     156                        .head = { \
     157                                .next = &(name).waiters.head, \
     158                                .prev = &(name).waiters.head, \
     159                        } \
     160                } \
     161        }
     162
     163#define FIBRIL_SEMAPHORE_INITIALIZE(name, cnt) \
     164        fibril_semaphore_t name = FIBRIL_SEMAPHORE_INITIALIZER(name, cnt)
     165
    152166extern void __fibril_synch_init(void);
    153167extern void __fibril_synch_fini(void);
     
    197211extern void mpsc_close(mpsc_t *);
    198212
    199 __HELENOS_DECLS_END;
    200 
    201213#endif
    202214
Note: See TracChangeset for help on using the changeset viewer.