summaryrefslogtreecommitdiff
path: root/commands.c
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>2013-05-17 01:20:39 -0400
committerPaul Smith <psmith@gnu.org>2013-05-17 01:20:39 -0400
commitb730fbc6b86d777e80856e997ddc56fc4a851769 (patch)
tree9ca4f2aae6b0f5d8669c7990f3b2f50f22cd1780 /commands.c
parentc21c1455fdfc6e87d75941f48841c72903e1e0f4 (diff)
downloadgunmake-b730fbc6b86d777e80856e997ddc56fc4a851769.tar.gz
Remove the dlopen() pointer from struct filedef.
This pointer is almost never needed, and it increases the size of the filedef struct for all files (of which there are a huge number for large builds). Instead keep a bit field marking whether the file is a loaded object and if so call a new function to unload it. In load.c we keep a simple linked list of loaded objects (of which there will be very few typically) and their dlopen() pointers.
Diffstat (limited to 'commands.c')
-rw-r--r--commands.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/commands.c b/commands.c
index e8a9f1c..1627702 100644
--- a/commands.c
+++ b/commands.c
@@ -471,10 +471,9 @@ execute_file_commands (struct file *file)
set_file_variables (file);
/* If this is a loaded dynamic object, unload it before remaking.
- Some systems don't allow to overwrite a loaded shared
- library. */
- if (file->dlopen_ptr)
- dlclose (file->dlopen_ptr);
+ Some systems don't support overwriting a loaded object. */
+ if (file->loaded)
+ unload_file (file->name);
/* Start the commands running. */
new_job (file);