Deferred instantiation of socket implmentations until registration.
Instantiating the implementations on plugin load was problematic in case multiple socket plugins were loaded. Now, the first one registered is instantiated.
This commit is contained in:
1 parent
4de8398f93
commit
fa20849431
11 files changed
+104
-78
No files matched your search
@@ -1,4 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2010 Tobias Brunner
|
||||
* Hochschule fuer Technik Rapperswil
|
||||
* Copyright (C) 2010 Martin Willi
|
||||
* Copyright (C) 2010 revosec AG
|
||||
*
|
||||
@@ -31,17 +33,13 @@ struct private_socket_default_plugin_t {
|
||||
*/
|
||||
socket_default_plugin_t public;
|
||||
|
||||
/**
|
||||
* Socket instance.
|
||||
*/
|
||||
socket_default_socket_t *socket;
|
||||
};
|
||||
|
||||
METHOD(plugin_t, destroy, void,
|
||||
private_socket_default_plugin_t *this)
|
||||
{
|
||||
charon->socket->remove_socket(charon->socket, &this->socket->socket);
|
||||
this->socket->destroy(this->socket);
|
||||
charon->socket->remove_socket(charon->socket,
|
||||
(socket_constructor_t)socket_default_socket_create);
|
||||
free(this);
|
||||
}
|
||||
|
||||
@@ -58,15 +56,10 @@ plugin_t *socket_default_plugin_create()
|
||||
.destroy = _destroy,
|
||||
},
|
||||
},
|
||||
.socket = socket_default_socket_create(),
|
||||
);
|
||||
|
||||
if (!this->socket)
|
||||
{
|
||||
free(this);
|
||||
return NULL;
|
||||
}
|
||||
charon->socket->add_socket(charon->socket, &this->socket->socket);
|
||||
charon->socket->add_socket(charon->socket,
|
||||
(socket_constructor_t)socket_default_socket_create);
|
||||
|
||||
return &this->public.plugin;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user