I think you need to PROTECT the vector you're putting in the slot as
well as the overall object.  At any rate, the problem goes away for me
with the revised version of dummy.c below.  (Empirically, PROTECT'ing
the class definition didn't seem to be needed, but experience suggests
that too much protection  is better than too little.)

#include <Rdefines.h>

SEXP foo() {

    SEXP ans, cl, el;

    PROTECT(cl = MAKE_CLASS("test"));
    PROTECT(ans = NEW_OBJECT(cl));
    PROTECT(el = allocVector(LGLSXP, 1));
    SET_SLOT(ans, install("lgl"), el);
    LOGICAL(GET_SLOT(ans, install("lgl")))[0] = TRUE;
    UNPROTECT(3);
    return(ans);
}


Torsten Hothorn wrote:
> 
> Hi,
> 
> the following example aiming at a class containing a logical slot
> segfaults under R-1.9.0 when `gctorture(on = TRUE)' is used:
> 
> Code code (dummy.c):
> 
> #include <Rdefines.h>
> 
> SEXP foo() {
> 
>     SEXP ans;
> 
>     PROTECT(ans = NEW_OBJECT(MAKE_CLASS("test")));
>     SET_SLOT(ans, install("lgl"), allocVector(LGLSXP, 1));
>     LOGICAL(GET_SLOT(ans, install("lgl")))[0] = TRUE;
>     UNPROTECT(1);
>     return(ans);
> }
> 
> R code (dummy.R):
> 
> dyn.load("dummy.so")
> 
> setClass("test", representation = representation(lgl = "logical"))
> 
> a = .Call("foo")
> a # OK
> 
> gctorture(on = TRUE)
> a = .Call("foo")
> gctorture(on = FALSE)
> a # segfault
> 
> which gives
> 
> R>
> R>
> R> dyn.load("dummy.so")
> R>
> R> setClass("test", representation = representation(lgl = "logical"))
> [1] "test"
> R>
> R> a = .Call("foo")
> R> a
> An object of class "test"
> Slot "lgl":
> [1] TRUE
> 
> R>
> R> gctorture(on = TRUE)
> R> a = .Call("foo")
> R> gctorture(on = FALSE)
> Segmentation fault
> 
> Best,
> 
> Torsten
> 
> R> version
>          _
> platform i686-pc-linux-gnu
> arch     i686
> os       linux-gnu
> system   i686, linux-gnu
> status
> major    1
> minor    9.0
> year     2004
> month    04
> day      12
> language R
> R>
> 
>  _______________________________________________________________________
> |                                                                       |
> |       Dr. rer. nat. Torsten Hothorn                                   |
> |       Institut fuer Medizininformatik, Biometrie und Epidemiologie    |
> |       Waldstrasse 6, D-91054 Erlangen, Deutschland                    |
> |       Tel: ++49-9131-85-22707 (dienstl.)                              |
> |       Fax: ++49-9131-85-25740                                         |
> |       Email:  [EMAIL PROTECTED]                  |
> |               PLEASE send emails cc to [EMAIL PROTECTED]             |
> |       Web: http://www.imbe.med.uni-erlangen.de/~hothorn               |
> |_______________________________________________________________________|
> 
> ______________________________________________
> [EMAIL PROTECTED] mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-devel

-- 
John M. Chambers                  [EMAIL PROTECTED]
Bell Labs, Lucent Technologies    office: (908)582-2681
700 Mountain Avenue, Room 2C-282  fax:    (908)582-3340
Murray Hill, NJ  07974            web: http://www.cs.bell-labs.com/~jmc

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-devel

Reply via email to