gras_dynar_t *_gras_trp_sockets; /* all existing sockets */
static void gras_trp_socket_free(void *s); /* free one socket */
-static fd_set FDread;
-
gras_error_t
gras_trp_plugin_new(const char *name, gras_trp_setup_t setup);
RAISE_MALLOC;
errcode = setup(plug);
- switch (setup(plug)) {
+ switch (errcode) {
case mismatch_error:
/* SG plugin return mismatch when in RL mode (and vice versa) */
+ free(plug->name);
free(plug);
break;
/* make room for all socket ownership descriptions */
TRY(gras_dynar_new(&_gras_trp_sockets, sizeof(gras_socket_t*), NULL));
- /* We do not ear for any socket for now */
- FD_ZERO(&FDread);
-
/* make room for all plugins */
TRY(gras_dict_new(&_gras_trp_plugins));
gras_trp_plugin_t *plug = p;
if (plug) {
- if (plug->exit)
+ if (plug->exit) {
plug->exit(plug);
- else if (plug->data)
+ } else if (plug->data) {
+ DEBUG1("Plugin %s lacks exit(). Free data anyway.",plug->name);
free(plug->data);
+ }
free(plug->name);
free(plug);
return no_error;
}
-void gras_socket_close(gras_socket_t **sock) {
+void gras_socket_close(gras_socket_t *sock) {
gras_socket_t *sock_iter;
int cursor;
/* FIXME: Issue an event when the socket is closed */
- if (sock && *sock) {
+ if (sock) {
gras_dynar_foreach(_gras_trp_sockets,cursor,sock_iter) {
- if (*sock == sock_iter) {
+ if (sock == sock_iter) {
gras_dynar_cursor_rm(_gras_trp_sockets,&cursor);
- if ( (*sock)->plugin->socket_close)
- (* (*sock)->plugin->socket_close)(*sock);
+ if ( sock->plugin->socket_close)
+ (* sock->plugin->socket_close)(sock);
/* free the memory */
- free(*sock);
- *sock=NULL;
+ free(sock);
return;
}
}