Changeset 0a8f070 in mainline for uspace/lib/c/generic/async/client.c
- Timestamp:
- 2019-08-07T02:33:03Z (6 years ago)
- Children:
- fe86d9d
- Parents:
- 103939e
- git-author:
- Michal Koutný <xm.koutny+hos@…> (2015-08-16 16:04:14)
- git-committer:
- Matthieu Riolo <matthieu.riolo@…> (2019-08-07 02:33:03)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/async/client.c
r103939e r0a8f070 124 124 static fibril_rmutex_t message_mutex; 125 125 126 /** Naming service session*/127 async_sess_t session_ns;126 /** Primary session (spawn parent, later naming service) */ 127 async_sess_t *session_primary = NULL; 128 128 129 129 /** Message data */ … … 168 168 static FIBRIL_CONDVAR_INITIALIZE(avail_phone_cv); 169 169 170 171 static async_sess_t *create_session_primary(void) 172 { 173 async_sess_t *session = (async_sess_t *) malloc(sizeof(async_sess_t)); 174 175 if (session != NULL) { 176 session_ns->iface = 0; 177 session->mgmt = EXCHANGE_ATOMIC; 178 session->phone = PHONE_INITIAL; 179 session->arg1 = 0; 180 session->arg2 = 0; 181 session->arg3 = 0; 182 183 fibril_mutex_initialize(&session->remote_state_mtx); 184 session->remote_state_data = NULL; 185 186 list_initialize(&session->exch_list); 187 fibril_mutex_initialize(&session->mutex); 188 atomic_set(&session->refcnt, 0); 189 &session.exchanges = 0; 190 } 191 192 return session; 193 } 194 195 170 196 /** Initialize the async framework. 171 197 * 172 198 */ 173 void __async_client_init( void)199 void __async_client_init(async_sess_t *session) 174 200 { 175 201 if (fibril_rmutex_initialize(&message_mutex) != EOK) 176 202 abort(); 177 203 178 session_ns.iface = 0; 179 session_ns.mgmt = EXCHANGE_ATOMIC; 180 session_ns.phone = PHONE_NS; 181 session_ns.arg1 = 0; 182 session_ns.arg2 = 0; 183 session_ns.arg3 = 0; 184 185 fibril_mutex_initialize(&session_ns.remote_state_mtx); 186 session_ns.remote_state_data = NULL; 187 188 list_initialize(&session_ns.exch_list); 189 fibril_mutex_initialize(&session_ns.mutex); 190 session_ns.exchanges = 0; 204 if (session == NULL) { 205 session_primary = create_session_primary(); 206 } else { 207 session_primary = session; 208 } 209 210 if (session_primary == NULL) 211 abort(); 191 212 } 192 213 … … 807 828 *out_phone = (cap_phone_handle_t) ipc_get_arg5(&result); 808 829 return EOK; 830 } 831 832 /** Injects another session instead of original primary session 833 * 834 * @param session Session to naming service. 835 * 836 * @return old primary session (to spawn parent) 837 */ 838 async_sess_t *async_session_primary_swap(async_sess_t *session) 839 { 840 assert(session_primary->phone == PHONE_INITIAL); 841 842 async_sess_t *old_primary = session_primary; 843 session_primary = session; 844 return old_primary; 809 845 } 810 846
Note:
See TracChangeset
for help on using the changeset viewer.