Projects
home:Eustace:branches:Eulaceura:Factory
acpid
_service:obs_scm:acpid-2.0.32-kacpimon-dynamic-...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:obs_scm:acpid-2.0.32-kacpimon-dynamic-connections.patch of Package acpid
diff --git a/kacpimon/connection_list.c b/kacpimon/connection_list.c index 9b0b0a8..f228186 100644 --- a/kacpimon/connection_list.c +++ b/kacpimon/connection_list.c @@ -22,6 +22,7 @@ #include <unistd.h> #include <stdio.h> +#include <stdlib.h> #include "connection_list.h" @@ -30,9 +31,9 @@ /*---------------------------------------------------------------*/ /* private objects */ -#define MAX_CONNECTIONS 100 +static int capacity = 0; -static struct connection connection_list[MAX_CONNECTIONS]; +static struct connection *connection_list = NULL; static int nconnections = 0; @@ -51,9 +52,19 @@ add_connection(struct connection *p) { if (nconnections < 0) return; - if (nconnections >= MAX_CONNECTIONS) { - printf("add_connection(): Too many connections.\n"); - return; + + /* if the list is full, allocate more space */ + if (nconnections >= capacity) { + /* no more than 1024 */ + if (capacity > 1024) { + printf("add_connection(): Too many connections.\n"); + return; + } + + /* another 20 */ + capacity += 20; + connection_list = + realloc(connection_list, sizeof(struct connection) * capacity); } if (nconnections == 0) @@ -70,6 +81,30 @@ add_connection(struct connection *p) /*---------------------------------------------------------------*/ +void +delete_all_connections(void) +{ + int i = 0; + + /* For each connection */ + for (i = 0; i <= get_number_of_connections(); ++i) + { + struct connection *p; + + p = get_connection(i); + + /* If this connection is invalid, try the next. */ + if (p == 0) + continue; + + close(p -> fd); + } + free(connection_list); + connection_list = NULL; +} + +/*---------------------------------------------------------------*/ + struct connection * find_connection(int fd) { diff --git a/kacpimon/connection_list.h b/kacpimon/connection_list.h index 1d037cf..a787637 100644 --- a/kacpimon/connection_list.h +++ b/kacpimon/connection_list.h @@ -56,4 +56,7 @@ extern const fd_set *get_fdset(void); /* get the highest fd that was added to the list */ extern int get_highestfd(void); +/* delete all connections, closing the fds */ +extern void delete_all_connections(void); + #endif /* CONNECTION_LIST_H__ */ diff --git a/kacpimon/kacpimon.c b/kacpimon/kacpimon.c index 1ddb9aa..253d270 100644 --- a/kacpimon/kacpimon.c +++ b/kacpimon/kacpimon.c @@ -164,27 +164,6 @@ static void monitor(void) // --------------------------------------------------------------- -static void close_all(void) -{ - int i = 0; - - /* For each connection */ - for (i = 0; i <= get_number_of_connections(); ++i) - { - struct connection *p; - - p = get_connection(i); - - /* If this connection is invalid, try the next. */ - if (p == 0) - continue; - - close(p -> fd); - } -} - -// --------------------------------------------------------------- - int main(void) { printf("Kernel ACPI Event Monitor...\n"); @@ -199,7 +178,7 @@ int main(void) printf("Closing files...\n"); - close_all(); + delete_all_connections(); printf("Goodbye\n");
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2