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