diff options
author | Tom de Vries <tdevries@suse.de> | 2019-01-24 14:12:19 +0000 |
---|---|---|
committer | Tom de Vries <vries@gcc.gnu.org> | 2019-01-24 14:12:19 +0000 |
commit | 738c56d4104867713d8fe64dd0ddbdef56f9c67b (patch) | |
tree | 6accba5f52360417d24f463315367a1eb43c4be8 /libgomp/plugin | |
parent | 0e2eb6abeb77d86e672f0872bca5dd3528134734 (diff) | |
download | gcc-738c56d4104867713d8fe64dd0ddbdef56f9c67b.zip gcc-738c56d4104867713d8fe64dd0ddbdef56f9c67b.tar.gz gcc-738c56d4104867713d8fe64dd0ddbdef56f9c67b.tar.bz2 |
[nvptx, libgomp] Fix memleak in GOMP_OFFLOAD_fini_device
I wrote a test-case:
...
int
main (void)
{
for (unsigned i = 0; i < 128; ++i)
{
acc_init (acc_device_nvidia);
acc_shutdown (acc_device_nvidia);
}
return 0;
}
...
and ran it under valgrind. The only leak location reported with a frequency
of 128, was the allocation of ptx_devices in nvptx_init.
Fix this by freeing ptx_devices in GOMP_OFFLOAD_fini_device, once
instantiated_devices drops to 0.
2019-01-24 Tom de Vries <tdevries@suse.de>
* plugin/plugin-nvptx.c (GOMP_OFFLOAD_fini_device): Free ptx_devices
once instantiated_devices drops to 0.
From-SVN: r268237
Diffstat (limited to 'libgomp/plugin')
-rw-r--r-- | libgomp/plugin/plugin-nvptx.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/libgomp/plugin/plugin-nvptx.c b/libgomp/plugin/plugin-nvptx.c index ff90b67..387e7cc 100644 --- a/libgomp/plugin/plugin-nvptx.c +++ b/libgomp/plugin/plugin-nvptx.c @@ -1936,6 +1936,12 @@ GOMP_OFFLOAD_fini_device (int n) instantiated_devices--; } + if (instantiated_devices == 0) + { + free (ptx_devices); + ptx_devices = NULL; + } + pthread_mutex_unlock (&ptx_dev_lock); return true; } |