diff options
Diffstat (limited to 'acpid-2.0.32-kacpimon-dynamic-connections.patch')
| -rw-r--r-- | acpid-2.0.32-kacpimon-dynamic-connections.patch | 131 | 
1 files changed, 131 insertions, 0 deletions
diff --git a/acpid-2.0.32-kacpimon-dynamic-connections.patch b/acpid-2.0.32-kacpimon-dynamic-connections.patch new file mode 100644 index 0000000..2cd2a7c --- /dev/null +++ b/acpid-2.0.32-kacpimon-dynamic-connections.patch @@ -0,0 +1,131 @@ +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"); +   | 
