Changes in uspace/lib/c/generic/net/modules.c [bf172825:9934f7d] in mainline
- File:
-
- 1 edited
-
uspace/lib/c/generic/net/modules.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/net/modules.c
rbf172825 r9934f7d 114 114 async_client_conn_t client_receiver) 115 115 { 116 return bind_service_timeout(need, arg1, arg2, arg3, client_receiver, 0); 117 } 118 119 /** Create bidirectional connection with the needed module service and registers 120 * the message receiver. 121 * 122 * @param[in] need The needed module service. 123 * @param[in] arg1 The first parameter. 124 * @param[in] arg2 The second parameter. 125 * @param[in] arg3 The third parameter. 126 * @param[in] client_receiver The message receiver. 127 * @param[in] timeout The connection timeout in microseconds. No timeout if 128 * set to zero (0). 129 * 130 * @return The phone of the needed service. 131 * @return ETIMEOUT if the connection timeouted. 132 * @return Other error codes as defined for the ipc_connect_to_me() 133 * function. 134 * 135 */ 136 int bind_service_timeout(services_t need, sysarg_t arg1, sysarg_t arg2, 137 sysarg_t arg3, async_client_conn_t client_receiver, suseconds_t timeout) 138 { 116 139 /* Connect to the needed service */ 117 int phone = connect_to_service (need);140 int phone = connect_to_service_timeout(need, timeout); 118 141 if (phone >= 0) { 119 142 /* Request the bidirectional connection */ … … 136 159 int connect_to_service(services_t need) 137 160 { 138 return service_obsolete_connect_blocking(need, 0, 0); 161 return connect_to_service_timeout(need, 0); 162 } 163 164 /** Connects to the needed module. 165 * 166 * @param[in] need The needed module service. 167 * @param[in] timeout The connection timeout in microseconds. No timeout if 168 * set to zero (0). 169 * @return The phone of the needed service. 170 * @return ETIMEOUT if the connection timeouted. 171 */ 172 int connect_to_service_timeout(services_t need, suseconds_t timeout) 173 { 174 int phone; 175 176 /* If no timeout is set */ 177 if (timeout <= 0) 178 return service_obsolete_connect_blocking(need, 0, 0); 179 180 while (true) { 181 phone = service_obsolete_connect(need, 0, 0); 182 if ((phone >= 0) || (phone != ENOENT)) 183 return phone; 184 185 /* Abort if no time is left */ 186 if (timeout <= 0) 187 return ETIMEOUT; 188 189 /* Wait the minimum of the module wait time and the timeout */ 190 usleep((timeout <= MODULE_WAIT_TIME) ? 191 timeout : MODULE_WAIT_TIME); 192 timeout -= MODULE_WAIT_TIME; 193 } 139 194 } 140 195
Note:
See TracChangeset
for help on using the changeset viewer.
