Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

error handling in kinsol #386

Merged
merged 27 commits into from
Dec 13, 2023
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
3071461
error handling in kinsol
balos1 Dec 6, 2023
e88be40
Merge branch 'feature/error-handling-just-the-core-formatted' into fe…
balos1 Dec 6, 2023
fd264b7
Merge branch 'feature/error-handling-just-the-core-formatted' into fe…
balos1 Dec 7, 2023
73e060f
Merge branch 'feature/error-handling-just-the-core-formatted' into fe…
balos1 Dec 7, 2023
cd06d49
Merge branch 'feature/error-handling-just-the-core-formatted' into fe…
balos1 Dec 7, 2023
b6d8ccc
Merge branch 'feature/error-handling-just-the-core-formatted' into fe…
balos1 Dec 7, 2023
4427f36
Merge branch 'feature/error-handling-just-the-core-formatted' into fe…
balos1 Dec 7, 2023
9b24158
Merge branch 'feature/error-handling-staging' into feature/error-hand…
balos1 Dec 7, 2023
da999c0
Merge branch 'feature/error-handling-staging' into feature/error-hand…
balos1 Dec 7, 2023
0a09ce1
Merge branch 'feature/error-handling-staging' into feature/error-hand…
balos1 Dec 8, 2023
b756054
Merge branch 'feature/error-handling-staging' into feature/error-hand…
balos1 Dec 8, 2023
e2356de
reapply refactor tool
balos1 Dec 8, 2023
4ba6ca4
remove kinsol error handler function
balos1 Dec 8, 2023
e1795af
Merge branch 'feature/error-handling-staging' into feature/error-hand…
balos1 Dec 8, 2023
4a660a2
Merge branch 'feature/error-handling-staging' into feature/error-hand…
balos1 Dec 8, 2023
8f9c14a
format after merge
balos1 Dec 8, 2023
ed7baa2
Update src/kinsol/kinsol.c
balos1 Dec 8, 2023
b617db0
Merge branch 'feature/error-handling-staging' into feature/error-hand…
balos1 Dec 8, 2023
1b64ff0
Merge remote-tracking branch 'origin/feature/error-handling-kinsol' i…
balos1 Dec 8, 2023
3b07d44
Merge branch 'feature/error-handling-staging' into feature/error-hand…
balos1 Dec 11, 2023
0ea2be3
Merge branch 'feature/error-handling-staging' into feature/error-hand…
balos1 Dec 11, 2023
ffb693d
Merge branch 'feature/error-handling-staging' into feature/error-hand…
balos1 Dec 11, 2023
1c8ede1
Merge branch 'feature/error-handling-staging' into feature/error-hand…
balos1 Dec 12, 2023
e2d5e9d
address comments
balos1 Dec 12, 2023
bf440b5
call GetLastError in ProcessError
balos1 Dec 12, 2023
b5680be
Merge branch 'feature/error-handling-staging' into feature/error-hand…
balos1 Dec 12, 2023
6540504
Update src/kinsol/kinsol.c
balos1 Dec 13, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 67 additions & 68 deletions src/kinsol/kinsol.c
Original file line number Diff line number Diff line change
Expand Up @@ -214,15 +214,15 @@ void* KINCreate(SUNContext sunctx)
/* Test inputs */
if (sunctx == NULL)
{
KINProcessError(NULL, 0, "KIN", "KINCreate", MSG_NULL_SUNCTX);
KINProcessError(NULL, 0, __LINE__, __func__, __FILE__, MSG_NULL_SUNCTX);
return (NULL);
}

kin_mem = NULL;
kin_mem = (KINMem)malloc(sizeof(struct KINMemRec));
if (kin_mem == NULL)
{
KINProcessError(kin_mem, 0, "KINSOL", "KINCreate", MSG_MEM_FAIL);
KINProcessError(kin_mem, 0, __LINE__, __func__, __FILE__, MSG_MEM_FAIL);
return (NULL);
}

Expand Down Expand Up @@ -335,7 +335,7 @@ int KINInit(void* kinmem, KINSysFn func, N_Vector tmpl)

if (kinmem == NULL)
{
KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINInit", MSG_NO_MEM);
KINProcessError(NULL, KIN_MEM_NULL, __LINE__, __func__, __FILE__, MSG_NO_MEM);
return (KIN_MEM_NULL);
}
kin_mem = (KINMem)kinmem;
Expand All @@ -344,7 +344,8 @@ int KINInit(void* kinmem, KINSysFn func, N_Vector tmpl)

if (func == NULL)
{
KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINInit", MSG_FUNC_NULL);
KINProcessError(kin_mem, KIN_ILL_INPUT, __LINE__, __func__, __FILE__,
MSG_FUNC_NULL);
SUNDIALS_MARK_FUNCTION_END(KIN_PROFILER);
return (KIN_ILL_INPUT);
}
Expand All @@ -354,7 +355,8 @@ int KINInit(void* kinmem, KINSysFn func, N_Vector tmpl)
nvectorOK = KINCheckNvector(tmpl);
if (!nvectorOK)
{
KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINInit", MSG_BAD_NVECTOR);
KINProcessError(kin_mem, KIN_ILL_INPUT, __LINE__, __func__, __FILE__,
MSG_BAD_NVECTOR);
SUNDIALS_MARK_FUNCTION_END(KIN_PROFILER);
return (KIN_ILL_INPUT);
}
Expand All @@ -378,7 +380,8 @@ int KINInit(void* kinmem, KINSysFn func, N_Vector tmpl)
allocOK = KINAllocVectors(kin_mem, tmpl);
if (!allocOK)
{
KINProcessError(kin_mem, KIN_MEM_FAIL, "KINSOL", "KINInit", MSG_MEM_FAIL);
KINProcessError(kin_mem, KIN_MEM_FAIL, __LINE__, __func__, __FILE__,
MSG_MEM_FAIL);
free(kin_mem);
kin_mem = NULL;
SUNDIALS_MARK_FUNCTION_END(KIN_PROFILER);
Expand Down Expand Up @@ -495,7 +498,7 @@ int KINSol(void* kinmem, N_Vector u, int strategy_in, N_Vector u_scale,

if (kinmem == NULL)
{
KINProcessError(NULL, KIN_MEM_NULL, "KINSOL", "KINSol", MSG_NO_MEM);
KINProcessError(NULL, KIN_MEM_NULL, __LINE__, __func__, __FILE__, MSG_NO_MEM);
return (KIN_MEM_NULL);
}
kin_mem = (KINMem)kinmem;
Expand All @@ -504,7 +507,8 @@ int KINSol(void* kinmem, N_Vector u, int strategy_in, N_Vector u_scale,

if (kin_mem->kin_MallocDone == SUNFALSE)
{
KINProcessError(NULL, KIN_NO_MALLOC, "KINSOL", "KINSol", MSG_NO_MALLOC);
KINProcessError(NULL, KIN_NO_MALLOC, __LINE__, __func__, __FILE__,
MSG_NO_MALLOC);
SUNDIALS_MARK_FUNCTION_END(KIN_PROFILER);
return (KIN_NO_MALLOC);
}
Expand All @@ -523,14 +527,15 @@ int KINSol(void* kinmem, N_Vector u, int strategy_in, N_Vector u_scale,
{
if (kin_mem->kin_uu == NULL)
{
KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSol", MSG_UU_NULL);
KINProcessError(kin_mem, KIN_ILL_INPUT, __LINE__, __func__, __FILE__,
MSG_UU_NULL);
SUNDIALS_MARK_FUNCTION_END(KIN_PROFILER);
return (KIN_ILL_INPUT);
}

if (kin_mem->kin_constraintsSet != SUNFALSE)
{
KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSol",
KINProcessError(kin_mem, KIN_ILL_INPUT, __LINE__, __func__, __FILE__,
MSG_CONSTRAINTS_NOTOK);
SUNDIALS_MARK_FUNCTION_END(KIN_PROFILER);
return (KIN_ILL_INPUT);
Expand All @@ -548,12 +553,12 @@ int KINSol(void* kinmem, N_Vector u, int strategy_in, N_Vector u_scale,
switch (ret)
{
case KIN_SYSFUNC_FAIL:
KINProcessError(kin_mem, KIN_SYSFUNC_FAIL, "KINSOL", "KINSol",
KINProcessError(kin_mem, KIN_SYSFUNC_FAIL, __LINE__, __func__, __FILE__,
MSG_SYSFUNC_FAILED);
break;
case KIN_MAXITER_REACHED:
KINProcessError(kin_mem, KIN_MAXITER_REACHED, "KINSOL", "KINSol",
MSG_MAXITER_REACHED);
KINProcessError(kin_mem, KIN_MAXITER_REACHED, __LINE__, __func__,
__FILE__, MSG_MAXITER_REACHED);
break;
}

Expand Down Expand Up @@ -602,7 +607,8 @@ int KINSol(void* kinmem, N_Vector u, int strategy_in, N_Vector u_scale,
kin_mem->kin_gval = N_VClone(kin_mem->kin_unew);
if (kin_mem->kin_gval == NULL)
{
KINProcessError(kin_mem, KIN_MEM_FAIL, "KINSOL", "KINSol", MSG_MEM_FAIL);
KINProcessError(kin_mem, KIN_MEM_FAIL, __LINE__, __func__, __FILE__,
MSG_MEM_FAIL);
SUNDIALS_MARK_FUNCTION_END(KIN_PROFILER);
return (KIN_MEM_FAIL);
}
Expand Down Expand Up @@ -725,40 +731,40 @@ int KINSol(void* kinmem, N_Vector u, int strategy_in, N_Vector u_scale,
switch (ret)
{
case KIN_SYSFUNC_FAIL:
KINProcessError(kin_mem, KIN_SYSFUNC_FAIL, "KINSOL", "KINSol",
KINProcessError(kin_mem, KIN_SYSFUNC_FAIL, __LINE__, __func__, __FILE__,
MSG_SYSFUNC_FAILED);
break;
case KIN_REPTD_SYSFUNC_ERR:
KINProcessError(kin_mem, KIN_REPTD_SYSFUNC_ERR, "KINSOL", "KINSol",
MSG_SYSFUNC_REPTD);
KINProcessError(kin_mem, KIN_REPTD_SYSFUNC_ERR, __LINE__, __func__,
__FILE__, MSG_SYSFUNC_REPTD);
break;
case KIN_LSETUP_FAIL:
KINProcessError(kin_mem, KIN_LSETUP_FAIL, "KINSOL", "KINSol",
KINProcessError(kin_mem, KIN_LSETUP_FAIL, __LINE__, __func__, __FILE__,
MSG_LSETUP_FAILED);
break;
case KIN_LSOLVE_FAIL:
KINProcessError(kin_mem, KIN_LSOLVE_FAIL, "KINSOL", "KINSol",
KINProcessError(kin_mem, KIN_LSOLVE_FAIL, __LINE__, __func__, __FILE__,
MSG_LSOLVE_FAILED);
break;
case KIN_LINSOLV_NO_RECOVERY:
KINProcessError(kin_mem, KIN_LINSOLV_NO_RECOVERY, "KINSOL", "KINSol",
MSG_LINSOLV_NO_RECOVERY);
KINProcessError(kin_mem, KIN_LINSOLV_NO_RECOVERY, __LINE__, __func__,
__FILE__, MSG_LINSOLV_NO_RECOVERY);
break;
case KIN_LINESEARCH_NONCONV:
KINProcessError(kin_mem, KIN_LINESEARCH_NONCONV, "KINSOL", "KINSol",
MSG_LINESEARCH_NONCONV);
KINProcessError(kin_mem, KIN_LINESEARCH_NONCONV, __LINE__, __func__,
__FILE__, MSG_LINESEARCH_NONCONV);
break;
case KIN_LINESEARCH_BCFAIL:
KINProcessError(kin_mem, KIN_LINESEARCH_BCFAIL, "KINSOL", "KINSol",
MSG_LINESEARCH_BCFAIL);
KINProcessError(kin_mem, KIN_LINESEARCH_BCFAIL, __LINE__, __func__,
__FILE__, MSG_LINESEARCH_BCFAIL);
break;
case KIN_MAXITER_REACHED:
KINProcessError(kin_mem, KIN_MAXITER_REACHED, "KINSOL", "KINSol",
KINProcessError(kin_mem, KIN_MAXITER_REACHED, __LINE__, __func__, __FILE__,
MSG_MAXITER_REACHED);
break;
case KIN_MXNEWT_5X_EXCEEDED:
KINProcessError(kin_mem, KIN_MXNEWT_5X_EXCEEDED, "KINSOL", "KINSol",
MSG_MXNEWT_5X_EXCEEDED);
KINProcessError(kin_mem, KIN_MXNEWT_5X_EXCEEDED, __LINE__, __func__,
__FILE__, MSG_MXNEWT_5X_EXCEEDED);
break;
}

Expand Down Expand Up @@ -928,7 +934,7 @@ static sunbooleantype KINAllocVectors(KINMem kin_mem, N_Vector tmpl)
(kin_mem->kin_m_aa * kin_mem->kin_m_aa) * sizeof(sunrealtype));
if (kin_mem->kin_R_aa == NULL)
{
KINProcessError(kin_mem, 0, "KINSOL", "KINAllocVectors", MSG_MEM_FAIL);
KINProcessError(kin_mem, 0, __LINE__, __func__, __FILE__, MSG_MEM_FAIL);
N_VDestroy(kin_mem->kin_unew);
N_VDestroy(kin_mem->kin_fval);
N_VDestroy(kin_mem->kin_pp);
Expand All @@ -946,7 +952,7 @@ static sunbooleantype KINAllocVectors(KINMem kin_mem, N_Vector tmpl)
(sunrealtype*)malloc(kin_mem->kin_m_aa * sizeof(sunrealtype));
if (kin_mem->kin_gamma_aa == NULL)
{
KINProcessError(kin_mem, 0, "KINSOL", "KINAllocVectors", MSG_MEM_FAIL);
KINProcessError(kin_mem, 0, __LINE__, __func__, __FILE__, MSG_MEM_FAIL);
N_VDestroy(kin_mem->kin_unew);
N_VDestroy(kin_mem->kin_fval);
N_VDestroy(kin_mem->kin_pp);
Expand All @@ -965,7 +971,7 @@ static sunbooleantype KINAllocVectors(KINMem kin_mem, N_Vector tmpl)
(long int*)malloc(kin_mem->kin_m_aa * sizeof(long int));
if (kin_mem->kin_ipt_map == NULL)
{
KINProcessError(kin_mem, 0, "KINSOL", "KINAllocVectors", MSG_MEM_FAIL);
KINProcessError(kin_mem, 0, __LINE__, __func__, __FILE__, MSG_MEM_FAIL);
N_VDestroy(kin_mem->kin_unew);
N_VDestroy(kin_mem->kin_fval);
N_VDestroy(kin_mem->kin_pp);
Expand All @@ -985,7 +991,7 @@ static sunbooleantype KINAllocVectors(KINMem kin_mem, N_Vector tmpl)
(sunrealtype*)malloc(2 * (kin_mem->kin_m_aa + 1) * sizeof(sunrealtype));
if (kin_mem->kin_cv == NULL)
{
KINProcessError(kin_mem, 0, "KINSOL", "KINAllocVectors", MSG_MEM_FAIL);
KINProcessError(kin_mem, 0, __LINE__, __func__, __FILE__, MSG_MEM_FAIL);
N_VDestroy(kin_mem->kin_unew);
N_VDestroy(kin_mem->kin_fval);
N_VDestroy(kin_mem->kin_pp);
Expand All @@ -1006,7 +1012,7 @@ static sunbooleantype KINAllocVectors(KINMem kin_mem, N_Vector tmpl)
(N_Vector*)malloc(2 * (kin_mem->kin_m_aa + 1) * sizeof(N_Vector));
if (kin_mem->kin_Xv == NULL)
{
KINProcessError(kin_mem, 0, "KINSOL", "KINAllocVectors", MSG_MEM_FAIL);
KINProcessError(kin_mem, 0, __LINE__, __func__, __FILE__, MSG_MEM_FAIL);
N_VDestroy(kin_mem->kin_unew);
N_VDestroy(kin_mem->kin_fval);
N_VDestroy(kin_mem->kin_pp);
Expand Down Expand Up @@ -1214,7 +1220,7 @@ static sunbooleantype KINAllocVectors(KINMem kin_mem, N_Vector tmpl)
((kin_mem->kin_m_aa * kin_mem->kin_m_aa)) * sizeof(sunrealtype));
if (kin_mem->kin_T_aa == NULL)
{
KINProcessError(kin_mem, 0, "KINSOL", "KINAllocVectors",
KINProcessError(kin_mem, 0, __LINE__, __func__, __FILE__,
MSG_MEM_FAIL);
N_VDestroy(kin_mem->kin_unew);
N_VDestroy(kin_mem->kin_fval);
Expand Down Expand Up @@ -1437,7 +1443,8 @@ static int KINSolInit(KINMem kin_mem)

if (kin_mem->kin_uu == NULL)
{
KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSolInit", MSG_UU_NULL);
KINProcessError(kin_mem, KIN_ILL_INPUT, __LINE__, __func__, __FILE__,
MSG_UU_NULL);
return (KIN_ILL_INPUT);
}

Expand All @@ -1448,35 +1455,35 @@ static int KINSolInit(KINMem kin_mem)
(kin_mem->kin_globalstrategy != KIN_PICARD) &&
(kin_mem->kin_globalstrategy != KIN_FP))
{
KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSolInit",
KINProcessError(kin_mem, KIN_ILL_INPUT, __LINE__, __func__, __FILE__,
MSG_BAD_GLSTRAT);
return (KIN_ILL_INPUT);
}

if (kin_mem->kin_uscale == NULL)
{
KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSolInit",
KINProcessError(kin_mem, KIN_ILL_INPUT, __LINE__, __func__, __FILE__,
MSG_BAD_USCALE);
return (KIN_ILL_INPUT);
}

if (N_VMin(kin_mem->kin_uscale) <= ZERO)
{
KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSolInit",
KINProcessError(kin_mem, KIN_ILL_INPUT, __LINE__, __func__, __FILE__,
MSG_USCALE_NONPOSITIVE);
return (KIN_ILL_INPUT);
}

if (kin_mem->kin_fscale == NULL)
{
KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSolInit",
KINProcessError(kin_mem, KIN_ILL_INPUT, __LINE__, __func__, __FILE__,
MSG_BAD_FSCALE);
return (KIN_ILL_INPUT);
}

if (N_VMin(kin_mem->kin_fscale) <= ZERO)
{
KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSolInit",
KINProcessError(kin_mem, KIN_ILL_INPUT, __LINE__, __func__, __FILE__,
MSG_FSCALE_NONPOSITIVE);
return (KIN_ILL_INPUT);
}
Expand All @@ -1485,7 +1492,7 @@ static int KINSolInit(KINMem kin_mem)
((kin_mem->kin_globalstrategy == KIN_PICARD) ||
(kin_mem->kin_globalstrategy == KIN_FP)))
{
KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSolInit",
KINProcessError(kin_mem, KIN_ILL_INPUT, __LINE__, __func__, __FILE__,
MSG_CONSTRAINTS_NOTOK);
return (KIN_ILL_INPUT);
}
Expand All @@ -1502,7 +1509,7 @@ static int KINSolInit(KINMem kin_mem)
if ((kin_mem->kin_constraints->ops->nvconstrmask == NULL) ||
(kin_mem->kin_constraints->ops->nvminquotient == NULL))
{
KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSolInit",
KINProcessError(kin_mem, KIN_ILL_INPUT, __LINE__, __func__, __FILE__,
MSG_BAD_NVECTOR);
return (KIN_ILL_INPUT);
}
Expand All @@ -1515,7 +1522,7 @@ static int KINSolInit(KINMem kin_mem)
if (!N_VConstrMask(kin_mem->kin_constraints, kin_mem->kin_uu,
kin_mem->kin_vtemp1))
{
KINProcessError(kin_mem, KIN_ILL_INPUT, "KINSOL", "KINSolInit",
KINProcessError(kin_mem, KIN_ILL_INPUT, __LINE__, __func__, __FILE__,
MSG_INITIAL_CNSTRNT);
return (KIN_ILL_INPUT);
}
Expand Down Expand Up @@ -1576,14 +1583,14 @@ static int KINSolInit(KINMem kin_mem)

if (retval < 0)
{
KINProcessError(kin_mem, KIN_SYSFUNC_FAIL, "KINSOL", "KINSolInit",
KINProcessError(kin_mem, KIN_SYSFUNC_FAIL, __LINE__, __func__, __FILE__,
MSG_SYSFUNC_FAILED);
return (KIN_SYSFUNC_FAIL);
}
else if (retval > 0)
{
KINProcessError(kin_mem, KIN_FIRST_SYSFUNC_ERR, "KINSOL", "KINSolInit",
MSG_SYSFUNC_FIRST);
KINProcessError(kin_mem, KIN_FIRST_SYSFUNC_ERR, __LINE__, __func__,
__FILE__, MSG_SYSFUNC_FIRST);
return (KIN_FIRST_SYSFUNC_ERR);
}

Expand All @@ -1605,7 +1612,7 @@ static int KINSolInit(KINMem kin_mem)
retval = kin_mem->kin_linit(kin_mem);
if (retval != 0)
{
KINProcessError(kin_mem, KIN_LINIT_FAIL, "KINSOL", "KINSolInit",
KINProcessError(kin_mem, KIN_LINIT_FAIL, __LINE__, __func__, __FILE__,
MSG_LINIT_FAIL);
return (KIN_LINIT_FAIL);
}
Expand Down Expand Up @@ -2562,44 +2569,36 @@ void KINPrintInfo(KINMem kin_mem, int info_code, const char* module,
* =================================================================
*/

/*
* KINProcessError
*
* KINProcessError is a high level error handling function.
* - If cv_mem==NULL it prints the error message to stderr.
* - Otherwise, it sets up and calls the error handling function
* pointed to by cv_ehfun.
*/

void KINProcessError(KINMem kin_mem, int error_code, const char* module,
const char* fname, const char* msgfmt, ...)
void KINProcessError(KINMem kin_mem, int error_code, int line, const char* func,
const char* file, const char* msgfmt, ...)
{
va_list ap;
char msg[256];

/* Initialize the argument pointer variable
(msgfmt is the last required argument to KINProcessError) */

(msgfmt is the last required argument to cvProcessError) */
balos1 marked this conversation as resolved.
Show resolved Hide resolved
va_list ap;
va_start(ap, msgfmt);

/* Compose the message */

vsprintf(msg, msgfmt, ap);
size_t msglen = vsnprintf(NULL, 0, msgfmt, ap) + 1;
char* msg = (char*)malloc(msglen);
vsnprintf(msg, msglen, msgfmt, ap);

if (kin_mem == NULL)
{ /* We write to stderr */

#ifndef NO_FPRINTF_OUTPUT
fprintf(stderr, "\n[%s ERROR] %s\n ", module, fname);
fprintf(stderr, "\n[KINSOL ERROR] %s at %s:%d\n ", func, __FILE__, line);
fprintf(stderr, "%s\n\n", msg);
#endif
}
else
{ /* We can call ehfun */
kin_mem->kin_ehfun(error_code, module, fname, msg, kin_mem->kin_eh_data);
{
/* Call the SUNDIALS main error handler */
SUNHandleErrWithMsg(line, func, file, msg, error_code, kin_mem->kin_sunctx);
}

/* Finalize argument processing */
va_end(ap);
free(msg);

return;
}
Expand Down
Loading