Skip to content

Commit 6cf1301

Browse files
authored
Merge pull request #656 from jeroen/xptr-onexit
Add argument to XPtr template to run finalizer on exit (fixes #655)
2 parents 0566d7c + e3799de commit 6cf1301

File tree

4 files changed

+17
-10
lines changed

4 files changed

+17
-10
lines changed

ChangeLog

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
2017-03-15 Jeroen Ooms <[email protected]>
2+
3+
* inst/include/Rcpp/XPtr.h: added finalizeOnExit parameter
4+
15
2017-02-28 Dirk Eddelbuettel <[email protected]>
26

37
* src/Rcpp_init.cpp (R_init_Rcpp): Call R_useDynamicSymbols()

DESCRIPTION

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Package: Rcpp
22
Title: Seamless R and C++ Integration
3-
Version: 0.12.9.4
4-
Date: 2017-02-28
3+
Version: 0.12.9.5
4+
Date: 2017-03-15
55
Author: Dirk Eddelbuettel, Romain Francois, JJ Allaire, Kevin Ushey, Qiang Kou,
66
Nathan Russell, Douglas Bates and John Chambers
77
Maintainer: Dirk Eddelbuettel <[email protected]>

inst/NEWS.Rd

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
DataFrame (James Balamuta in \ghpr{638} addressing \ghit{630}).
1212
\item Fixed single-character handling in \code{Rstreambuf} (Iñaki Ucar in
1313
\ghpr{649} addressing \ghit{647}).
14+
\item XPtr gains a parameter \code{finalizeOnExit} to enable running the
15+
finalizer when R quits (Jeroen Ooms in \ghpr{656} addressing \ghit{655}).
1416
}
1517
\item Changes in Rcpp Sugar:
1618
\itemize{

inst/include/Rcpp/XPtr.h

+9-8
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,16 @@ void finalizer_wrapper(SEXP p){
4343
template <
4444
typename T,
4545
template <class> class StoragePolicy = PreserveStorage,
46-
void Finalizer(T*) = standard_delete_finalizer<T>
46+
void Finalizer(T*) = standard_delete_finalizer<T>,
47+
bool finalizeOnExit = false
4748
>
4849
class XPtr :
49-
public StoragePolicy< XPtr<T,StoragePolicy, Finalizer> >,
50-
public SlotProxyPolicy< XPtr<T,StoragePolicy, Finalizer> >,
51-
public AttributeProxyPolicy< XPtr<T,StoragePolicy, Finalizer> >,
52-
public TagProxyPolicy< XPtr<T,StoragePolicy, Finalizer> >,
53-
public ProtectedProxyPolicy< XPtr<T,StoragePolicy, Finalizer> >,
54-
public RObjectMethods< XPtr<T,StoragePolicy, Finalizer> >
50+
public StoragePolicy< XPtr<T,StoragePolicy, Finalizer, finalizeOnExit> >,
51+
public SlotProxyPolicy< XPtr<T,StoragePolicy, Finalizer, finalizeOnExit> >,
52+
public AttributeProxyPolicy< XPtr<T,StoragePolicy, Finalizer, finalizeOnExit> >,
53+
public TagProxyPolicy< XPtr<T,StoragePolicy, Finalizer, finalizeOnExit> >,
54+
public ProtectedProxyPolicy< XPtr<T,StoragePolicy, Finalizer, finalizeOnExit> >,
55+
public RObjectMethods< XPtr<T,StoragePolicy, Finalizer, finalizeOnExit> >
5556
{
5657
public:
5758

@@ -148,7 +149,7 @@ class XPtr :
148149
}
149150

150151
void setDeleteFinalizer() {
151-
R_RegisterCFinalizerEx( Storage::get__(), finalizer_wrapper<T,Finalizer> , FALSE) ;
152+
R_RegisterCFinalizerEx( Storage::get__(), finalizer_wrapper<T,Finalizer> , (Rboolean) finalizeOnExit) ;
152153
}
153154

154155
/**

0 commit comments

Comments
 (0)