Ignore:
File:
1 edited

Legend:

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

    r93ad49a8 r2c4aa39  
    4242#include <ipc/common.h>
    4343#include <fibril.h>
     44#include <fibril_synch.h>
    4445#include <sys/time.h>
    4546#include <atomic.h>
     
    9596} exch_mgmt_t;
    9697
    97 /** Forward declarations */
    98 struct _async_exch;
    99 struct _async_sess;
    100 
    101 typedef struct _async_sess async_sess_t;
    102 typedef struct _async_exch async_exch_t;
     98/** Session data */
     99typedef struct {
     100        /** List of inactive exchanges */
     101        list_t exch_list;
     102       
     103        /** Exchange management style */
     104        exch_mgmt_t mgmt;
     105       
     106        /** Session identification */
     107        int phone;
     108       
     109        /** First clone connection argument */
     110        sysarg_t arg1;
     111       
     112        /** Second clone connection argument */
     113        sysarg_t arg2;
     114       
     115        /** Third clone connection argument */
     116        sysarg_t arg3;
     117       
     118        /** Exchange mutex */
     119        fibril_mutex_t mutex;
     120       
     121        /** Number of opened exchanges */
     122        atomic_t refcnt;
     123} async_sess_t;
     124
     125/** Exchange data */
     126typedef struct {
     127        /** Link into list of inactive exchanges */
     128        link_t sess_link;
     129       
     130        /** Link into global list of inactive exchanges */
     131        link_t global_link;
     132       
     133        /** Session pointer */
     134        async_sess_t *sess;
     135       
     136        /** Exchange identification */
     137        int phone;
     138} async_exch_t;
    103139
    104140extern atomic_t threads_in_ipc_wait;
     
    140176extern int async_wait_timeout(aid_t, sysarg_t *, suseconds_t);
    141177
    142 extern fid_t async_new_connection(task_id_t, sysarg_t, ipc_callid_t,
     178extern fid_t async_new_connection(sysarg_t, sysarg_t, ipc_callid_t,
    143179    ipc_call_t *, async_client_conn_t, void *);
    144180
     
    150186extern void async_set_client_data_destructor(async_client_data_dtor_t);
    151187extern void *async_get_client_data(void);
    152 extern void *async_get_client_data_by_id(task_id_t);
    153 extern void async_put_client_data_by_id(task_id_t);
     188extern void *async_get_client_data_by_hash(sysarg_t);
     189extern void async_put_client_data_by_hash(sysarg_t);
    154190
    155191extern void async_set_client_connection(async_client_conn_t);
     
    337373
    338374/*
    339  * FIXME These functions just work around problems with parallel exchange
    340  * management. Proper solution needs to be implemented.
    341  */
    342 void async_sess_args_set(async_sess_t *sess, sysarg_t, sysarg_t, sysarg_t);
    343 
    344 /*
    345375 * User-friendly wrappers for async_share_in_start().
    346376 */
     
    455485extern int async_state_change_finalize(ipc_callid_t, async_exch_t *);
    456486
    457 extern void *async_remote_state_acquire(async_sess_t *);
    458 extern void async_remote_state_update(async_sess_t *, void *);
    459 extern void async_remote_state_release(async_sess_t *);
    460 extern void async_remote_state_release_exchange(async_exch_t *);
    461 
    462487#endif
    463488
Note: See TracChangeset for help on using the changeset viewer.