do_outgoing_connection() may delete a failed connection, and the structure

must not be accessed afterwards.
This commit is contained in:
Sven-Haegar Koch 2011-05-29 21:53:21 +02:00 committed by Guus Sliepen
parent 82109868b5
commit 04de15984f
2 changed files with 10 additions and 10 deletions

View file

@ -127,7 +127,7 @@ extern int contradicting_del_edge;
extern void retry_outgoing(outgoing_t *);
extern void handle_incoming_vpn_data(int, short, void *);
extern void finish_connecting(struct connection_t *);
extern void do_outgoing_connection(struct connection_t *);
extern bool do_outgoing_connection(struct connection_t *);
extern void handle_new_meta_connection(int, short, void *);
extern int setup_listen_socket(const sockaddr_t *);
extern int setup_vpn_in_socket(const sockaddr_t *);

View file

@ -350,7 +350,7 @@ void finish_connecting(connection_t *c) {
send_id(c);
}
void do_outgoing_connection(connection_t *c) {
bool do_outgoing_connection(connection_t *c) {
char *address, *port, *space;
int result;
@ -367,7 +367,7 @@ begin:
retry_outgoing(c->outgoing);
c->outgoing = NULL;
connection_del(c);
return;
return false;
}
get_config_string(c->outgoing->cfg, &address);
@ -434,7 +434,7 @@ begin:
if(result == -1) {
if(sockinprogress(sockerrno)) {
c->status.connecting = true;
return;
return true;
}
closesocket(c->socket);
@ -446,7 +446,7 @@ begin:
finish_connecting(c);
return;
return true;
}
static void handle_meta_write(int sock, short events, void *data) {
@ -512,11 +512,11 @@ void setup_outgoing_connection(outgoing_t *outgoing) {
connection_add(c);
do_outgoing_connection(c);
event_set(&c->inevent, c->socket, EV_READ | EV_PERSIST, handle_meta_connection_data, c);
event_set(&c->outevent, c->socket, EV_WRITE | EV_PERSIST, handle_meta_write, c);
event_add(&c->inevent, NULL);
if (do_outgoing_connection(c)) {
event_set(&c->inevent, c->socket, EV_READ | EV_PERSIST, handle_meta_connection_data, c);
event_set(&c->outevent, c->socket, EV_WRITE | EV_PERSIST, handle_meta_write, c);
event_add(&c->inevent, NULL);
}
}
/*