Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Development
openfoam
Commits
ba46d43b
Commit
ba46d43b
authored
Aug 02, 2011
by
mattijs
Browse files
BUG: dlLibraryTable: guarantee dlclose order opposite of dlopen order
parent
319292bc
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/OpenFOAM/db/dynamicLibrary/dlLibraryTable/dlLibraryTable.C
View file @
ba46d43b
...
...
@@ -35,8 +35,6 @@ defineTypeNameAndDebug(Foam::dlLibraryTable, 0);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam
::
dlLibraryTable
::
dlLibraryTable
()
:
HashTable
<
fileName
,
void
*
,
Hash
<
void
*>
>
()
{}
...
...
@@ -45,8 +43,6 @@ Foam::dlLibraryTable::dlLibraryTable
const
dictionary
&
dict
,
const
word
&
libsEntry
)
:
HashTable
<
fileName
,
void
*
,
Hash
<
void
*>
>
()
{
open
(
dict
,
libsEntry
);
}
...
...
@@ -56,17 +52,18 @@ Foam::dlLibraryTable::dlLibraryTable
Foam
::
dlLibraryTable
::~
dlLibraryTable
()
{
forAll
ConstIter
(
dlLibraryTable
,
*
this
,
iter
)
forAll
Reverse
(
libPtrs_
,
i
)
{
// bug in dlclose - does not call static destructors of
// loaded library when actually unloading the library.
// See https://bugzilla.novell.com/show_bug.cgi?id=680125 and 657627.
if
(
debug
)
if
(
libPtrs_
[
i
])
{
Info
<<
"dlLibraryTable::~dlLibraryTable() : closing "
<<
iter
()
<<
" with handle "
<<
long
(
iter
.
key
())
<<
endl
;
if
(
debug
)
{
Info
<<
"dlLibraryTable::~dlLibraryTable() : closing "
<<
libNames_
[
i
]
<<
" with handle "
<<
long
(
libPtrs_
[
i
])
<<
endl
;
}
dlClose
(
libPtrs_
[
i
]);
}
dlClose
(
iter
.
key
());
}
}
...
...
@@ -95,7 +92,7 @@ bool Foam::dlLibraryTable::open
{
WarningIn
(
"dlLibraryTable::open(const fileName&)"
"dlLibraryTable::open(const fileName&
, const bool
)"
)
<<
"could not load "
<<
functionLibName
<<
endl
;
}
...
...
@@ -104,7 +101,9 @@ bool Foam::dlLibraryTable::open
}
else
{
return
insert
(
functionLibPtr
,
functionLibName
);
libPtrs_
.
append
(
functionLibPtr
);
libNames_
.
append
(
functionLibName
);
return
true
;
}
}
else
...
...
@@ -120,18 +119,30 @@ bool Foam::dlLibraryTable::close
const
bool
verbose
)
{
void
*
libPtr
=
findLibrary
(
functionLibName
);
if
(
libPtr
)
label
index
=
-
1
;
forAllReverse
(
libNames_
,
i
)
{
if
(
libNames_
[
i
]
==
functionLibName
)
{
index
=
i
;
break
;
}
}
if
(
index
!=
-
1
)
{
if
(
debug
)
{
Info
<<
"dlLibraryTable::close : closing "
<<
functionLibName
<<
" with handle "
<<
long
(
libPtr
)
<<
endl
;
<<
" with handle "
<<
long
(
libPtr
s_
[
index
]
)
<<
endl
;
}
erase
(
libPtr
);
bool
ok
=
dlClose
(
libPtrs_
[
index
]);
libPtrs_
[
index
]
=
NULL
;
libNames_
[
index
]
=
fileName
::
null
;
if
(
!
dlClose
(
libPtr
)
)
if
(
!
ok
)
{
if
(
verbose
)
{
...
...
@@ -153,13 +164,20 @@ bool Foam::dlLibraryTable::close
void
*
Foam
::
dlLibraryTable
::
findLibrary
(
const
fileName
&
functionLibName
)
{
forAllConstIter
(
dlLibraryTable
,
*
this
,
iter
)
label
index
=
-
1
;
forAllReverse
(
libNames_
,
i
)
{
if
(
iter
()
==
functionLibName
)
if
(
libNames_
[
i
]
==
functionLibName
)
{
return
iter
.
key
();
index
=
i
;
break
;
}
}
if
(
index
!=
-
1
)
{
return
libPtrs_
[
index
];
}
return
NULL
;
}
...
...
src/OpenFOAM/db/dynamicLibrary/dlLibraryTable/dlLibraryTable.H
View file @
ba46d43b
...
...
@@ -36,8 +36,7 @@ SourceFiles
#define dlLibraryTable_H
#include
"label.H"
#include
"Hash.H"
#include
"HashTable.H"
#include
"DynamicList.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
...
...
@@ -49,11 +48,14 @@ namespace Foam
\*---------------------------------------------------------------------------*/
class
dlLibraryTable
:
public
HashTable
<
fileName
,
void
*
,
Hash
<
void
*>
>
{
// Private Member Functions
DynamicList
<
void
*>
libPtrs_
;
DynamicList
<
fileName
>
libNames_
;
//- Disallow default bitwise copy construct
dlLibraryTable
(
const
dlLibraryTable
&
);
...
...
src/OpenFOAM/db/dynamicLibrary/dlLibraryTable/dlLibraryTableTemplates.C
View file @
ba46d43b
...
...
@@ -62,8 +62,8 @@ bool Foam::dlLibraryTable::open
WarningIn
(
"dlLibraryTable::open"
"(const dictionary&
dict
, const word&
libsEntry
, "
"const TablePtr
tablePtr
)"
"(const dictionary&, const word&, "
"const TablePtr
&
)"
)
<<
"library "
<<
libName
<<
" did not introduce any new entries"
<<
endl
<<
endl
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment