Fix problem identified by Ferris McCormick -- we were missing some
out-of-bounds protection for output ID's in some functions. Also, move some logic for closing the syslog inside a conditional block -- it's only necessary to close the syslog if we actually closed a stream. This commit was SVN r7518.
Этот коммит содержится в:
родитель
7c924dc221
Коммит
31b2ec198b
@ -251,27 +251,27 @@ void opal_output_close(int output_id)
|
|||||||
/* If it's valid, used, enabled, and has an open file descriptor,
|
/* If it's valid, used, enabled, and has an open file descriptor,
|
||||||
* free the resources associated with the descriptor */
|
* free the resources associated with the descriptor */
|
||||||
|
|
||||||
|
OPAL_THREAD_LOCK(&mutex);
|
||||||
if (output_id >= 0 && output_id < OPAL_OUTPUT_MAX_STREAMS &&
|
if (output_id >= 0 && output_id < OPAL_OUTPUT_MAX_STREAMS &&
|
||||||
info[output_id].ldi_used && info[output_id].ldi_enabled) {
|
info[output_id].ldi_used && info[output_id].ldi_enabled) {
|
||||||
free_descriptor(output_id);
|
free_descriptor(output_id);
|
||||||
}
|
|
||||||
|
|
||||||
/* If no one has the syslog open, we should close it */
|
/* If no one has the syslog open, we should close it */
|
||||||
|
|
||||||
OPAL_THREAD_LOCK(&mutex);
|
for (i = 0; i < OPAL_OUTPUT_MAX_STREAMS; ++i) {
|
||||||
for (i = 0; i < OPAL_OUTPUT_MAX_STREAMS; ++i) {
|
if (info[i].ldi_used && info[i].ldi_syslog) {
|
||||||
if (info[i].ldi_used && info[i].ldi_syslog) {
|
break;
|
||||||
break;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
if (i >= OPAL_OUTPUT_MAX_STREAMS && syslog_opened) {
|
if (i >= OPAL_OUTPUT_MAX_STREAMS && syslog_opened) {
|
||||||
closelog();
|
closelog();
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
DeregisterEventSource(info[output_id].ldi_syslog_ident);
|
DeregisterEventSource(info[output_id].ldi_syslog_ident);
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/* Somewhat of a hack to free up the temp_str */
|
/* Somewhat of a hack to free up the temp_str */
|
||||||
|
|
||||||
@ -290,10 +290,12 @@ void opal_output_close(int output_id)
|
|||||||
*/
|
*/
|
||||||
void opal_output(int output_id, const char *format, ...)
|
void opal_output(int output_id, const char *format, ...)
|
||||||
{
|
{
|
||||||
va_list arglist;
|
if (output_id >= 0 && output_id < OPAL_OUTPUT_MAX_STREAMS) {
|
||||||
va_start(arglist, format);
|
va_list arglist;
|
||||||
output(output_id, format, arglist);
|
va_start(arglist, format);
|
||||||
va_end(arglist);
|
output(output_id, format, arglist);
|
||||||
|
va_end(arglist);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -302,7 +304,8 @@ void opal_output(int output_id, const char *format, ...)
|
|||||||
*/
|
*/
|
||||||
void opal_output_verbose(int level, int output_id, const char *format, ...)
|
void opal_output_verbose(int level, int output_id, const char *format, ...)
|
||||||
{
|
{
|
||||||
if (info[output_id].ldi_verbose_level >= level) {
|
if (output_id >= 0 && output_id < OPAL_OUTPUT_MAX_STREAMS &&
|
||||||
|
info[output_id].ldi_verbose_level >= level) {
|
||||||
va_list arglist;
|
va_list arglist;
|
||||||
va_start(arglist, format);
|
va_start(arglist, format);
|
||||||
output(output_id, format, arglist);
|
output(output_id, format, arglist);
|
||||||
@ -316,7 +319,9 @@ void opal_output_verbose(int level, int output_id, const char *format, ...)
|
|||||||
*/
|
*/
|
||||||
void opal_output_set_verbosity(int output_id, int level)
|
void opal_output_set_verbosity(int output_id, int level)
|
||||||
{
|
{
|
||||||
info[output_id].ldi_verbose_level = level;
|
if (output_id >= 0 && output_id < OPAL_OUTPUT_MAX_STREAMS) {
|
||||||
|
info[output_id].ldi_verbose_level = level;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user