Changeset 3937

Show
Ignore:
Timestamp:
01/01/08 23:13:00 (5 years ago)
Author:
daisuke
Message:

fix memory management issues

Location:
lang/perl/Senna/trunk
Files:
1 added
4 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Senna/trunk/lib/Senna.xs

    r3915 r3937  
    142142 
    143143SV * 
    144 SennaPerl_Records_next(self) 
     144SennaPerl_Records__XS_next(self) 
     145        SV *self; 
     146    CODE: 
     147        RETVAL = SennaPerl_Records_next(self); 
     148    OUTPUT: 
     149        RETVAL 
     150 
     151SV * 
     152SennaPerl_Records_nhits(self) 
    145153        SV *self; 
    146154 
    147155SV * 
    148 SennaPerl_Records_nhits(self) 
     156SennaPerl_Records_curr_key(self) 
    149157        SV *self; 
    150158 
  • lang/perl/Senna/trunk/lib/Senna/Index.pm

    r3915 r3937  
    88use warnings; 
    99use Senna::Index::Info; 
     10use Senna::Records; 
    1011use Senna::Record; 
    1112 
  • lang/perl/Senna/trunk/senna-records.c

    r3931 r3937  
    3333    char keybuf[SEN_MAX_KEY_SIZE]; 
    3434    int score; 
    35     sen_rc rc; 
    3635    SennaPerl_Records *records = XS_STATE(SennaPerl_Records *, obj); 
    3736 
    38     rc = sen_records_next(records->records, &keybuf, SEN_MAX_KEY_SIZE, &score); 
    39     if(rc == sen_success) { 
     37    if (sen_records_next(records->records, &keybuf, SEN_MAX_KEY_SIZE, &score)) { 
    4038        dSP; 
    4139        ENTER; 
     
    4543        XPUSHs(sv_2mortal(newSVpv("Senna::Record", 13))); 
    4644        XPUSHs(sv_2mortal(newSVpv("key", 3))); 
    47         XPUSHs(sv_2mortal(newSVpv(keybuf, 0))); 
     45        XPUSHs(sv_2mortal(newSVpvf("%s", keybuf))); 
    4846        XPUSHs(sv_2mortal(newSVpv("score", 5))); 
    4947        XPUSHs(sv_2mortal(newSViv(score))); 
     
    5856            croak ("Senna::Record::new did not return a proper object"); 
    5957        } 
     58        SvREFCNT_inc(sv); 
    6059 
    6160        FREETMPS; 
     
    8079{ 
    8180    SennaPerl_Records *records = XS_STATE(SennaPerl_Records *, obj); 
    82 SP_DEBUG("Senna::Records::DESTROY"); 
    83 SP_DEBUG("sen_records_close()"); 
    8481    sen_records_close(records->records); 
    85 SP_DEBUG("Safefree()"); 
    8682    Safefree(records); 
    87 SP_DEBUG("Senna::Records DONE"); 
     83} 
     84 
     85SV * 
     86SennaPerl_Records_curr_key(obj) 
     87        SV *obj; 
     88{ 
     89    char keybuf[SEN_MAX_KEY_SIZE]; 
     90    SennaPerl_Records *records = XS_STATE(SennaPerl_Records *, obj); 
     91    if (sen_records_curr_key(records->records, keybuf, SEN_MAX_KEY_SIZE)) { 
     92        return newSVpvf("%s", keybuf); 
     93    } 
     94    return &PL_sv_undef; 
    8895} 
    8996 
  • lang/perl/Senna/trunk/t/index/03_simple.t

    r3932 r3937  
    55 
    66use strict; 
    7 use Test::More (tests => 821); 
     7use Test::More (tests => 829); 
    88use File::Spec; 
    99use File::Temp;