mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-26 18:41:17 +00:00
Fix error location logging
This commit is contained in:
parent
ad8a5e5daa
commit
fb828ed21d
@ -1,3 +1,10 @@
|
|||||||
|
Tue May 26 13:09:30 BST 2009 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
|
Fix error location logging
|
||||||
|
* src/virterror.c, src/virterror_internal.h: Re-factor error
|
||||||
|
reporting APIs to ensure correct source location info is
|
||||||
|
passed through to eventual virLogMessage call.
|
||||||
|
|
||||||
Tue May 26 11:25:30 BST 2009 Daniel P. Berrange <berrange@redhat.com>
|
Tue May 26 11:25:30 BST 2009 Daniel P. Berrange <berrange@redhat.com>
|
||||||
|
|
||||||
* tests/Makefile.am: Add ocaml intermediate files to CLEANFILES
|
* tests/Makefile.am: Add ocaml intermediate files to CLEANFILES
|
||||||
|
@ -590,10 +590,11 @@ virSetConnError(virConnectPtr conn)
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* virRaiseError:
|
* virRaiseErrorFull:
|
||||||
* @conn: the connection to the hypervisor if available
|
* @conn: the connection to the hypervisor if available
|
||||||
* @dom: the domain if available
|
* @filename: filename where error was raised
|
||||||
* @net: the network if available
|
* @funcname: function name where error was raised
|
||||||
|
* @linenr: line number where error was raised
|
||||||
* @domain: the virErrorDomain indicating where it's coming from
|
* @domain: the virErrorDomain indicating where it's coming from
|
||||||
* @code: the virErrorNumber code for the error
|
* @code: the virErrorNumber code for the error
|
||||||
* @level: the virErrorLevel for the error
|
* @level: the virErrorLevel for the error
|
||||||
@ -609,12 +610,19 @@ virSetConnError(virConnectPtr conn)
|
|||||||
* immediately if a callback is found and store it for later handling.
|
* immediately if a callback is found and store it for later handling.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
virRaiseError(virConnectPtr conn,
|
virRaiseErrorFull(virConnectPtr conn,
|
||||||
virDomainPtr dom ATTRIBUTE_UNUSED,
|
const char *filename ATTRIBUTE_UNUSED,
|
||||||
virNetworkPtr net ATTRIBUTE_UNUSED,
|
const char *funcname,
|
||||||
int domain, int code, virErrorLevel level,
|
size_t linenr,
|
||||||
const char *str1, const char *str2, const char *str3,
|
int domain,
|
||||||
int int1, int int2, const char *msg, ...)
|
int code,
|
||||||
|
virErrorLevel level,
|
||||||
|
const char *str1,
|
||||||
|
const char *str2,
|
||||||
|
const char *str3,
|
||||||
|
int int1,
|
||||||
|
int int2,
|
||||||
|
const char *fmt, ...)
|
||||||
{
|
{
|
||||||
virErrorPtr to;
|
virErrorPtr to;
|
||||||
void *userData = virUserData;
|
void *userData = virUserData;
|
||||||
@ -650,18 +658,18 @@ virRaiseError(virConnectPtr conn,
|
|||||||
/*
|
/*
|
||||||
* formats the message
|
* formats the message
|
||||||
*/
|
*/
|
||||||
if (msg == NULL) {
|
if (fmt == NULL) {
|
||||||
str = strdup(_("No error message provided"));
|
str = strdup(_("No error message provided"));
|
||||||
} else {
|
} else {
|
||||||
VIR_GET_VAR_STR(msg, str);
|
VIR_GET_VAR_STR(fmt, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Hook up the error or warning to the logging facility
|
* Hook up the error or warning to the logging facility
|
||||||
* TODO: pass function name and lineno
|
* XXXX should we include filename as 'category' instead of domain name ?
|
||||||
*/
|
*/
|
||||||
virLogMessage(virErrorDomainName(domain), virErrorLevelPriority(level),
|
virLogMessage(virErrorDomainName(domain), virErrorLevelPriority(level),
|
||||||
NULL, 0, 1, "%s", str);
|
funcname, linenr, 1, "%s", str);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Save the information about the error
|
* Save the information about the error
|
||||||
@ -1067,10 +1075,12 @@ virErrorMsg(virErrorNumber error, const char *info)
|
|||||||
* Helper function to do most of the grunt work for individual driver
|
* Helper function to do most of the grunt work for individual driver
|
||||||
* ReportError
|
* ReportError
|
||||||
*/
|
*/
|
||||||
void virReportErrorHelper(virConnectPtr conn, int domcode, int errcode,
|
void virReportErrorHelper(virConnectPtr conn,
|
||||||
const char *filename ATTRIBUTE_UNUSED,
|
int domcode,
|
||||||
const char *funcname ATTRIBUTE_UNUSED,
|
int errcode,
|
||||||
size_t linenr ATTRIBUTE_UNUSED,
|
const char *filename,
|
||||||
|
const char *funcname,
|
||||||
|
size_t linenr,
|
||||||
const char *fmt, ...)
|
const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
@ -1086,8 +1096,10 @@ void virReportErrorHelper(virConnectPtr conn, int domcode, int errcode,
|
|||||||
}
|
}
|
||||||
|
|
||||||
virerr = virErrorMsg(errcode, (errorMessage[0] ? errorMessage : NULL));
|
virerr = virErrorMsg(errcode, (errorMessage[0] ? errorMessage : NULL));
|
||||||
virRaiseError(conn, NULL, NULL, domcode, errcode, VIR_ERR_ERROR,
|
virRaiseErrorFull(conn, filename, funcname, linenr,
|
||||||
virerr, errorMessage, NULL, -1, -1, virerr, errorMessage);
|
domcode, errcode, VIR_ERR_ERROR,
|
||||||
|
virerr, errorMessage, NULL,
|
||||||
|
-1, -1, virerr, errorMessage);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1116,9 +1128,9 @@ const char *virStrerror(int theerrno, char *errBuf, size_t errBufLen)
|
|||||||
void virReportSystemErrorFull(virConnectPtr conn,
|
void virReportSystemErrorFull(virConnectPtr conn,
|
||||||
int domcode,
|
int domcode,
|
||||||
int theerrno,
|
int theerrno,
|
||||||
const char *filename ATTRIBUTE_UNUSED,
|
const char *filename,
|
||||||
const char *funcname ATTRIBUTE_UNUSED,
|
const char *funcname,
|
||||||
size_t linenr ATTRIBUTE_UNUSED,
|
size_t linenr,
|
||||||
const char *fmt, ...)
|
const char *fmt, ...)
|
||||||
{
|
{
|
||||||
char strerror_buf[1024];
|
char strerror_buf[1024];
|
||||||
@ -1148,19 +1160,21 @@ void virReportSystemErrorFull(virConnectPtr conn,
|
|||||||
if (!msgDetail)
|
if (!msgDetail)
|
||||||
msgDetail = errnoDetail;
|
msgDetail = errnoDetail;
|
||||||
|
|
||||||
virRaiseError(conn, NULL, NULL, domcode, VIR_ERR_SYSTEM_ERROR, VIR_ERR_ERROR,
|
virRaiseErrorFull(conn, filename, funcname, linenr,
|
||||||
msg, msgDetail, NULL, -1, -1, msg, msgDetail);
|
domcode, VIR_ERR_SYSTEM_ERROR, VIR_ERR_ERROR,
|
||||||
|
msg, msgDetail, NULL, -1, -1, msg, msgDetail);
|
||||||
}
|
}
|
||||||
|
|
||||||
void virReportOOMErrorFull(virConnectPtr conn,
|
void virReportOOMErrorFull(virConnectPtr conn,
|
||||||
int domcode,
|
int domcode,
|
||||||
const char *filename ATTRIBUTE_UNUSED,
|
const char *filename,
|
||||||
const char *funcname ATTRIBUTE_UNUSED,
|
const char *funcname,
|
||||||
size_t linenr ATTRIBUTE_UNUSED)
|
size_t linenr)
|
||||||
{
|
{
|
||||||
const char *virerr;
|
const char *virerr;
|
||||||
|
|
||||||
virerr = virErrorMsg(VIR_ERR_NO_MEMORY, NULL);
|
virerr = virErrorMsg(VIR_ERR_NO_MEMORY, NULL);
|
||||||
virRaiseError(conn, NULL, NULL, domcode, VIR_ERR_NO_MEMORY, VIR_ERR_ERROR,
|
virRaiseErrorFull(conn, filename, funcname, linenr,
|
||||||
virerr, NULL, NULL, -1, -1, virerr, NULL);
|
domcode, VIR_ERR_NO_MEMORY, VIR_ERR_ERROR,
|
||||||
|
virerr, NULL, NULL, -1, -1, virerr, NULL);
|
||||||
}
|
}
|
||||||
|
@ -33,17 +33,28 @@ extern void *virUserData;
|
|||||||
* *
|
* *
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
int virErrorInitialize(void);
|
int virErrorInitialize(void);
|
||||||
void virRaiseError(virConnectPtr conn,
|
void virRaiseErrorFull(virConnectPtr conn,
|
||||||
virDomainPtr dom,
|
const char *filename,
|
||||||
virNetworkPtr net,
|
const char *funcname,
|
||||||
int domain,
|
size_t linenr,
|
||||||
int code,
|
int domain,
|
||||||
virErrorLevel level,
|
int code,
|
||||||
const char *str1,
|
virErrorLevel level,
|
||||||
const char *str2,
|
const char *str1,
|
||||||
const char *str3,
|
const char *str2,
|
||||||
int int1, int int2, const char *msg, ...)
|
const char *str3,
|
||||||
ATTRIBUTE_FORMAT(printf, 12, 13);
|
int int1,
|
||||||
|
int int2,
|
||||||
|
const char *fmt, ...)
|
||||||
|
ATTRIBUTE_FORMAT(printf, 13, 14);
|
||||||
|
|
||||||
|
/* Includes 'dom' and 'net' for compatbility, but they're ignored */
|
||||||
|
#define virRaiseError(conn, dom, net, domain, code, level, \
|
||||||
|
str1, str2, str3, int1, int2, msg, ...) \
|
||||||
|
virRaiseErrorFull(conn, __FILE__, __FUNCTION__, __LINE__, \
|
||||||
|
domain, code, level, str1, str2, str3, int1, int2, \
|
||||||
|
msg, __VA_ARGS__)
|
||||||
|
|
||||||
const char *virErrorMsg(virErrorNumber error, const char *info);
|
const char *virErrorMsg(virErrorNumber error, const char *info);
|
||||||
void virReportErrorHelper(virConnectPtr conn, int domcode, int errcode,
|
void virReportErrorHelper(virConnectPtr conn, int domcode, int errcode,
|
||||||
const char *filename ATTRIBUTE_UNUSED,
|
const char *filename ATTRIBUTE_UNUSED,
|
||||||
|
Loading…
Reference in New Issue
Block a user