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 retry_outgoing(outgoing_t *);
|
||||||
extern void handle_incoming_vpn_data(int, short, void *);
|
extern void handle_incoming_vpn_data(int, short, void *);
|
||||||
extern void finish_connecting(struct connection_t *);
|
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 void handle_new_meta_connection(int, short, void *);
|
||||||
extern int setup_listen_socket(const sockaddr_t *);
|
extern int setup_listen_socket(const sockaddr_t *);
|
||||||
extern int setup_vpn_in_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);
|
send_id(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_outgoing_connection(connection_t *c) {
|
bool do_outgoing_connection(connection_t *c) {
|
||||||
char *address, *port, *space;
|
char *address, *port, *space;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
|
@ -367,7 +367,7 @@ begin:
|
||||||
retry_outgoing(c->outgoing);
|
retry_outgoing(c->outgoing);
|
||||||
c->outgoing = NULL;
|
c->outgoing = NULL;
|
||||||
connection_del(c);
|
connection_del(c);
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
get_config_string(c->outgoing->cfg, &address);
|
get_config_string(c->outgoing->cfg, &address);
|
||||||
|
@ -434,7 +434,7 @@ begin:
|
||||||
if(result == -1) {
|
if(result == -1) {
|
||||||
if(sockinprogress(sockerrno)) {
|
if(sockinprogress(sockerrno)) {
|
||||||
c->status.connecting = true;
|
c->status.connecting = true;
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
closesocket(c->socket);
|
closesocket(c->socket);
|
||||||
|
@ -446,7 +446,7 @@ begin:
|
||||||
|
|
||||||
finish_connecting(c);
|
finish_connecting(c);
|
||||||
|
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_meta_write(int sock, short events, void *data) {
|
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);
|
connection_add(c);
|
||||||
|
|
||||||
do_outgoing_connection(c);
|
if (do_outgoing_connection(c)) {
|
||||||
|
event_set(&c->inevent, c->socket, EV_READ | EV_PERSIST, handle_meta_connection_data, 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_set(&c->outevent, c->socket, EV_WRITE | EV_PERSIST, handle_meta_write, c);
|
event_add(&c->inevent, NULL);
|
||||||
event_add(&c->inevent, NULL);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue