fix segfault when gctorture() is enabled (#1489)

This commit is contained in:
Yixuan Qiu 2016-08-19 18:10:21 -04:00 committed by Tong He
parent 70432cac5b
commit 664a3bc7de

View File

@ -56,8 +56,8 @@ SEXP XGDMatrixCreateFromFile_R(SEXP fname, SEXP silent) {
CHECK_CALL(XGDMatrixCreateFromFile(CHAR(asChar(fname)), asInteger(silent), &handle)); CHECK_CALL(XGDMatrixCreateFromFile(CHAR(asChar(fname)), asInteger(silent), &handle));
ret = PROTECT(R_MakeExternalPtr(handle, R_NilValue, R_NilValue)); ret = PROTECT(R_MakeExternalPtr(handle, R_NilValue, R_NilValue));
R_RegisterCFinalizerEx(ret, _DMatrixFinalizer, TRUE); R_RegisterCFinalizerEx(ret, _DMatrixFinalizer, TRUE);
UNPROTECT(1);
R_API_END(); R_API_END();
UNPROTECT(1);
return ret; return ret;
} }
@ -80,8 +80,8 @@ SEXP XGDMatrixCreateFromMat_R(SEXP mat,
CHECK_CALL(XGDMatrixCreateFromMat(BeginPtr(data), nrow, ncol, asReal(missing), &handle)); CHECK_CALL(XGDMatrixCreateFromMat(BeginPtr(data), nrow, ncol, asReal(missing), &handle));
ret = PROTECT(R_MakeExternalPtr(handle, R_NilValue, R_NilValue)); ret = PROTECT(R_MakeExternalPtr(handle, R_NilValue, R_NilValue));
R_RegisterCFinalizerEx(ret, _DMatrixFinalizer, TRUE); R_RegisterCFinalizerEx(ret, _DMatrixFinalizer, TRUE);
UNPROTECT(1);
R_API_END(); R_API_END();
UNPROTECT(1);
return ret; return ret;
} }
@ -113,8 +113,8 @@ SEXP XGDMatrixCreateFromCSC_R(SEXP indptr,
&handle)); &handle));
ret = PROTECT(R_MakeExternalPtr(handle, R_NilValue, R_NilValue)); ret = PROTECT(R_MakeExternalPtr(handle, R_NilValue, R_NilValue));
R_RegisterCFinalizerEx(ret, _DMatrixFinalizer, TRUE); R_RegisterCFinalizerEx(ret, _DMatrixFinalizer, TRUE);
UNPROTECT(1);
R_API_END(); R_API_END();
UNPROTECT(1);
return ret; return ret;
} }
@ -132,8 +132,8 @@ SEXP XGDMatrixSliceDMatrix_R(SEXP handle, SEXP idxset) {
&res)); &res));
ret = PROTECT(R_MakeExternalPtr(res, R_NilValue, R_NilValue)); ret = PROTECT(R_MakeExternalPtr(res, R_NilValue, R_NilValue));
R_RegisterCFinalizerEx(ret, _DMatrixFinalizer, TRUE); R_RegisterCFinalizerEx(ret, _DMatrixFinalizer, TRUE);
UNPROTECT(1);
R_API_END(); R_API_END();
UNPROTECT(1);
return ret; return ret;
} }
@ -184,8 +184,8 @@ SEXP XGDMatrixGetInfo_R(SEXP handle, SEXP field) {
for (size_t i = 0; i < olen; ++i) { for (size_t i = 0; i < olen; ++i) {
REAL(ret)[i] = res[i]; REAL(ret)[i] = res[i];
} }
UNPROTECT(1);
R_API_END(); R_API_END();
UNPROTECT(1);
return ret; return ret;
} }
@ -224,8 +224,8 @@ SEXP XGBoosterCreate_R(SEXP dmats) {
CHECK_CALL(XGBoosterCreate(BeginPtr(dvec), dvec.size(), &handle)); CHECK_CALL(XGBoosterCreate(BeginPtr(dvec), dvec.size(), &handle));
ret = PROTECT(R_MakeExternalPtr(handle, R_NilValue, R_NilValue)); ret = PROTECT(R_MakeExternalPtr(handle, R_NilValue, R_NilValue));
R_RegisterCFinalizerEx(ret, _BoosterFinalizer, TRUE); R_RegisterCFinalizerEx(ret, _BoosterFinalizer, TRUE);
UNPROTECT(1);
R_API_END(); R_API_END();
UNPROTECT(1);
return ret; return ret;
} }
@ -305,8 +305,8 @@ SEXP XGBoosterPredict_R(SEXP handle, SEXP dmat, SEXP option_mask, SEXP ntree_lim
for (size_t i = 0; i < olen; ++i) { for (size_t i = 0; i < olen; ++i) {
REAL(ret)[i] = res[i]; REAL(ret)[i] = res[i];
} }
UNPROTECT(1);
R_API_END(); R_API_END();
UNPROTECT(1);
return ret; return ret;
} }
@ -343,8 +343,8 @@ SEXP XGBoosterModelToRaw_R(SEXP handle) {
if (olen != 0) { if (olen != 0) {
memcpy(RAW(ret), raw, olen); memcpy(RAW(ret), raw, olen);
} }
UNPROTECT(1);
R_API_END(); R_API_END();
UNPROTECT(1);
return ret; return ret;
} }
@ -363,8 +363,8 @@ SEXP XGBoosterDumpModel_R(SEXP handle, SEXP fmap, SEXP with_stats) {
stream << "booster[" << i <<"]\n" << res[i]; stream << "booster[" << i <<"]\n" << res[i];
SET_STRING_ELT(out, i, mkChar(stream.str().c_str())); SET_STRING_ELT(out, i, mkChar(stream.str().c_str()));
} }
UNPROTECT(1);
R_API_END(); R_API_END();
UNPROTECT(1);
return out; return out;
} }
@ -383,8 +383,8 @@ SEXP XGBoosterGetAttr_R(SEXP handle, SEXP name) {
} else { } else {
out = PROTECT(R_NilValue); out = PROTECT(R_NilValue);
} }
UNPROTECT(1);
R_API_END(); R_API_END();
UNPROTECT(1);
return out; return out;
} }
@ -412,8 +412,7 @@ SEXP XGBoosterGetAttrNames_R(SEXP handle) {
} else { } else {
out = PROTECT(R_NilValue); out = PROTECT(R_NilValue);
} }
UNPROTECT(1);
R_API_END(); R_API_END();
UNPROTECT(1);
return out; return out;
} }