|
Packit |
fd8b60 |
Issues to be addressed for src/util/et: -*- text -*-
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
Non-thread-safe aspects:
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
error_message uses a static buffer for "unknown error code" messages;
|
|
Packit |
fd8b60 |
a per-thread buffer may be better, but that depends on dynamic
|
|
Packit |
fd8b60 |
allocation working. A caller-provided buffer would be best, but
|
|
Packit |
fd8b60 |
that's a API change.
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
initialize_foo_error_table uses a global linked list hung off an
|
|
Packit |
fd8b60 |
unprotected variable in the library. {add,remove}_error_table do
|
|
Packit |
fd8b60 |
likewise, but can be changed without externally visible effect.
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
Workaround: Use a global lock for all calls to error_message and
|
|
Packit |
fd8b60 |
com_err, and when adding or removing error tables.
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
API divergence:
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
Transarc and Heimdal both have APIs that are different from this
|
|
Packit |
fd8b60 |
version. (Specifics?)
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
Karl Ramm has offered to try to combine them.
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
Workaround:
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
Reference counting:
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
If libraries are dynamically loaded and unloaded, and the init/fini
|
|
Packit |
fd8b60 |
functions add and remove error tables for *other* libraries they
|
|
Packit |
fd8b60 |
depend on (e.g., if a dynamically loadable Zephyr library's fini
|
|
Packit |
fd8b60 |
function removes the krb4 library error table and then dlcloses the
|
|
Packit |
fd8b60 |
krb4 library, while another dlopen reference keeps the krb4 library
|
|
Packit |
fd8b60 |
around), the error table is kept; a table must be removed the same
|
|
Packit |
fd8b60 |
number of times it was added before the library itself can be
|
|
Packit |
fd8b60 |
discarded.
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
It's not implemented as a reference count, but the effect is the same.
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
Fix needed: Update documentation.
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
64-bit support:
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
Values are currently computed as 32-bit values, sign-extended to
|
|
Packit |
fd8b60 |
"long", and output with "L" suffixes. Type errcode_t is "long".
|
|
Packit |
fd8b60 |
Kerberos uses a separately chosen signed type of at least 32 bits for
|
|
Packit |
fd8b60 |
error codes. The com_err library only look at the low 32 bits, so
|
|
Packit |
fd8b60 |
this is mostly just an issue for application code -- if anything
|
|
Packit |
fd8b60 |
truncates to 32 bits, and then widens without sign-extending, the
|
|
Packit |
fd8b60 |
value may not compare equal to the macro defined in the .h file. This
|
|
Packit |
fd8b60 |
isn't anything unusual for signed constants, of course, just something
|
|
Packit |
fd8b60 |
to keep in mind....
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
Workaround: Always use signed types of at least 32 bits for error
|
|
Packit |
fd8b60 |
codes.
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
man page:
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
No documentation on add_error_table/remove_error_table interfaces,
|
|
Packit |
fd8b60 |
even though they're the new, preferred interface.
|