do_outgoing_connection() may delete a failed connection, and the structure
must not be accessed afterwards.
This commit is contained in:
parent
82109868b5
commit
04de15984f
2 changed files with 10 additions and 10 deletions
|
@ -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 *);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue