Ignore:
File:
1 edited

Legend:

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

    r7b616e2 rf9b2cb4c  
    4040#include "private/ns.h"
    4141
    42 /*
    43  * XXX ns does not know about session_ns, so we create an extra session for
    44  * actual communicaton
    45  */
    46 static async_sess_t *sess_ns = NULL;
    47 
    4842int service_register(service_t service)
    4943{
    50         sysarg_t retval;
    51         ipc_call_t answer;
    52        
    53         async_sess_t *sess = ns_session_get();
    54         if (sess == NULL)
    55                 return EIO;
    56        
    57         async_exch_t *exch = async_exchange_begin(sess);
    58         aid_t req = async_send_1(exch, NS_REGISTER, service, &answer);
     44        async_exch_t *exch = async_exchange_begin(session_ns);
    5945        int rc = async_connect_to_me(exch, 0, service, 0);
    60        
    6146        async_exchange_end(exch);
    6247       
    63         if (rc != EOK) {
    64                 async_forget(req);
    65                 return rc;
    66         }
    67        
    68         async_wait_for(req, &retval);
    6948        return rc;
    7049}
    7150
     51
    7252async_sess_t *service_connect(service_t service, iface_t iface, sysarg_t arg3)
    7353{
    74         async_sess_t *sess = ns_session_get();
    75         if (sess == NULL)
     54        async_exch_t *exch = async_exchange_begin(session_ns);
     55        if (!exch)
    7656                return NULL;
    7757       
    78         async_exch_t *exch = async_exchange_begin(sess);
    79         if (exch == NULL)
    80                 return NULL;
    81        
    82         async_sess_t *csess =
     58        async_sess_t *sess =
    8359            async_connect_me_to_iface(exch, iface, service, arg3);
    8460        async_exchange_end(exch);
    8561       
    86         if (csess == NULL)
     62        if (!sess)
    8763                return NULL;
    8864       
     
    9268         * first argument for non-initial connections.
    9369         */
    94         async_sess_args_set(csess, iface, arg3, 0);
     70        async_sess_args_set(sess, iface, arg3, 0);
    9571       
    96         return csess;
     72        return sess;
    9773}
    9874
     
    10076    sysarg_t arg3)
    10177{
    102         async_sess_t *sess = ns_session_get();
    103         if (sess == NULL)
    104                 return NULL;
    105        
    106         async_exch_t *exch = async_exchange_begin(sess);
    107         async_sess_t *csess =
     78        async_exch_t *exch = async_exchange_begin(session_ns);
     79        async_sess_t *sess =
    10880            async_connect_me_to_blocking_iface(exch, iface, service, arg3);
    10981        async_exchange_end(exch);
    11082       
    111         if (csess == NULL)
     83        if (!sess)
    11284                return NULL;
    11385       
     
    11789         * first argument for non-initial connections.
    11890         */
    119         async_sess_args_set(csess, iface, arg3, 0);
     91        async_sess_args_set(sess, iface, arg3, 0);
    12092       
    121         return csess;
     93        return sess;
    12294}
    12395
     
    12597int ns_ping(void)
    12698{
    127         async_sess_t *sess = ns_session_get();
    128         if (sess == NULL)
    129                 return EIO;
    130        
    131         async_exch_t *exch = async_exchange_begin(sess);
     99        async_exch_t *exch = async_exchange_begin(session_ns);
    132100        int rc = async_req_0_0(exch, NS_PING);
    133101        async_exchange_end(exch);
     
    138106int ns_intro(task_id_t id)
    139107{
    140         async_exch_t *exch;
    141         async_sess_t *sess = ns_session_get();
    142         if (sess == NULL)
    143                 return EIO;
    144        
    145         exch = async_exchange_begin(sess);
     108        async_exch_t *exch = async_exchange_begin(session_ns);
    146109        int rc = async_req_2_0(exch, NS_ID_INTRO, LOWER32(id), UPPER32(id));
    147110        async_exchange_end(exch);
     
    150113}
    151114
    152 async_sess_t *ns_session_get(void)
    153 {
    154         async_exch_t *exch;
    155        
    156         if (sess_ns == NULL) {
    157                 exch = async_exchange_begin(session_ns);
    158                 sess_ns = async_connect_me_to_iface(exch, 0, 0, 0);
    159                 async_exchange_end(exch);
    160                 if (sess_ns == NULL)
    161                         return NULL;
    162         }
    163        
    164         return sess_ns;
    165 }
    166 
    167115/** @}
    168116 */
Note: See TracChangeset for help on using the changeset viewer.