Changes in uspace/srv/net/tcp/ucall.c [5441670:a1a101d] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/tcp/ucall.c
r5441670 ra1a101d 76 76 nconn = tcp_conn_new(lsock, fsock); 77 77 tcp_conn_add(nconn); 78 tcp_conn_lock(nconn);79 78 80 79 if (acpass == ap_active) { … … 84 83 85 84 if (oflags == tcp_open_nonblock) { 86 tcp_conn_unlock(nconn);87 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_open -> %p", nconn);88 85 *conn = nconn; 89 86 return TCP_EOK; … … 92 89 /* Wait for connection to be established or reset */ 93 90 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_open: Wait for connection."); 91 fibril_mutex_lock(&nconn->lock); 94 92 while (nconn->cstate == st_listen || 95 93 nconn->cstate == st_syn_sent || … … 101 99 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_open: Connection was reset."); 102 100 assert(nconn->cstate == st_closed); 103 tcp_conn_unlock(nconn);101 fibril_mutex_unlock(&nconn->lock); 104 102 return TCP_ERESET; 105 103 } 106 104 107 tcp_conn_unlock(nconn);105 fibril_mutex_unlock(&nconn->lock); 108 106 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_open: Connection was established."); 109 107 … … 122 120 log_msg(LOG_DEFAULT, LVL_DEBUG, "%s: tcp_uc_send()", conn->name); 123 121 124 tcp_conn_lock(conn);122 fibril_mutex_lock(&conn->lock); 125 123 126 124 if (conn->cstate == st_closed) { 127 tcp_conn_unlock(conn);125 fibril_mutex_unlock(&conn->lock); 128 126 return TCP_ENOTEXIST; 129 127 } … … 136 134 137 135 if (conn->snd_buf_fin) { 138 tcp_conn_unlock(conn);136 fibril_mutex_unlock(&conn->lock); 139 137 return TCP_ECLOSING; 140 138 } … … 150 148 151 149 if (conn->reset) { 152 tcp_conn_unlock(conn);150 fibril_mutex_unlock(&conn->lock); 153 151 return TCP_ERESET; 154 152 } … … 166 164 167 165 tcp_tqueue_new_data(conn); 168 tcp_conn_unlock(conn);166 fibril_mutex_unlock(&conn->lock); 169 167 170 168 return TCP_EOK; … … 179 177 log_msg(LOG_DEFAULT, LVL_DEBUG, "%s: tcp_uc_receive()", conn->name); 180 178 181 tcp_conn_lock(conn);179 fibril_mutex_lock(&conn->lock); 182 180 183 181 if (conn->cstate == st_closed) { 184 tcp_conn_unlock(conn);182 fibril_mutex_unlock(&conn->lock); 185 183 return TCP_ENOTEXIST; 186 184 } … … 198 196 if (conn->rcv_buf_fin) { 199 197 /* End of data, peer closed connection */ 200 tcp_conn_unlock(conn);198 fibril_mutex_unlock(&conn->lock); 201 199 return TCP_ECLOSING; 202 200 } else { 203 201 /* Connection was reset */ 204 202 assert(conn->reset); 205 tcp_conn_unlock(conn);203 fibril_mutex_unlock(&conn->lock); 206 204 return TCP_ERESET; 207 205 } … … 228 226 conn->name, xfer_size); 229 227 230 tcp_conn_unlock(conn);228 fibril_mutex_unlock(&conn->lock); 231 229 232 230 return TCP_EOK; … … 236 234 tcp_error_t tcp_uc_close(tcp_conn_t *conn) 237 235 { 238 log_msg(LOG_DEFAULT, LVL_DEBUG, "%s: tcp_uc_close(%p)", conn->name, 239 conn); 240 241 tcp_conn_lock(conn); 236 log_msg(LOG_DEFAULT, LVL_DEBUG, "%s: tcp_uc_close()", conn->name); 237 238 fibril_mutex_lock(&conn->lock); 242 239 243 240 if (conn->cstate == st_closed) { 244 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_close - ENOTEXIST"); 245 tcp_conn_unlock(conn); 241 fibril_mutex_unlock(&conn->lock); 246 242 return TCP_ENOTEXIST; 247 243 } 248 244 249 if (conn->cstate == st_listen || conn->cstate == st_syn_sent) {250 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_close - listen/syn_sent");251 tcp_conn_reset(conn);252 tcp_conn_remove(conn);253 tcp_conn_unlock(conn);254 return TCP_EOK;255 }256 257 245 if (conn->snd_buf_fin) { 258 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_close - ECLOSING"); 259 tcp_conn_unlock(conn); 246 fibril_mutex_unlock(&conn->lock); 260 247 return TCP_ECLOSING; 261 248 } 262 249 263 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_close - set snd_buf_fin");264 250 conn->snd_buf_fin = true; 265 251 tcp_tqueue_new_data(conn); 266 252 267 tcp_conn_unlock(conn);253 fibril_mutex_unlock(&conn->lock); 268 254 return TCP_EOK; 269 255 } … … 312 298 tcp_conn_t *conn; 313 299 314 log_msg(LOG_DEFAULT, LVL_DEBUG, 315 "tcp_as_segment_arrived(f:(%u), l:(%u))",316 sp-> foreign.port, sp->local.port);300 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_as_segment_arrived(f:(%x,%u), l:(%x,%u))", 301 sp->foreign.addr.ipv4, sp->foreign.port, 302 sp->local.addr.ipv4, sp->local.port); 317 303 318 304 conn = tcp_conn_find_ref(sp); … … 323 309 } 324 310 325 tcp_conn_lock(conn);311 fibril_mutex_lock(&conn->lock); 326 312 327 313 if (conn->cstate == st_closed) { 328 314 log_msg(LOG_DEFAULT, LVL_WARN, "Connection is closed."); 329 315 tcp_unexpected_segment(sp, seg); 330 tcp_conn_unlock(conn);316 fibril_mutex_unlock(&conn->lock); 331 317 tcp_conn_delref(conn); 332 318 return; 333 319 } 334 320 335 if (inet_addr_is_any(&conn->ident.foreign.addr)) 336 conn->ident.foreign.addr = sp->foreign.addr; 337 321 if (conn->ident.foreign.addr.ipv4 == TCP_IPV4_ANY) 322 conn->ident.foreign.addr.ipv4 = sp->foreign.addr.ipv4; 338 323 if (conn->ident.foreign.port == TCP_PORT_ANY) 339 324 conn->ident.foreign.port = sp->foreign.port; 340 341 if (inet_addr_is_any(&conn->ident.local.addr)) 342 conn->ident.local.addr = sp->local.addr; 325 if (conn->ident.local.addr.ipv4 == TCP_IPV4_ANY) 326 conn->ident.local.addr.ipv4 = sp->local.addr.ipv4; 343 327 344 328 tcp_conn_segment_arrived(conn, seg); 345 329 346 tcp_conn_unlock(conn);330 fibril_mutex_unlock(&conn->lock); 347 331 tcp_conn_delref(conn); 348 332 }
Note:
See TracChangeset
for help on using the changeset viewer.