|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Alexey Froloff 2:5020/1437.4 24 Sep 2000 19:23:42 To : All Subject : sv_2mortal -------------------------------------------------------------------------------- Я тyт подyyмал, и pешил набpосать паpy стpок на темy "sv_2mortal"... Опять вылезает 'Attempt to free unreferenced scalar', но уже когда я делаю perl_call_sv()... Варнинг пишет по два раза на каждый вызов, от содержимого sub BeforeSend не зависит. P.S. Может не XPUSHs надо делать, а XPUSHp? int BeforeSend(flist_t *l) { char *errsv_pv, *pv_tosend = NULL, *pv_sendas = NULL; STRLEN n_a; int save_err, pid, rc, iv_rc = 0; static char *ftypes[]={"PKT", "ARC", "FILE", "REQ", "ERR"}; if(!qperl) return 0; // Хватаем в паралельном процессе STDERR и выводим его в лог. pid = handle_perl_err(&save_err); { dSP; // Здесь заполняется некий хэш. export_rnode(); ENTER; SAVETMPS; PUSHMARK(SP); // Параметры XPUSHs(sv_2mortal(newSVpv(ftypes[l->type], 0))); XPUSHs(sv_2mortal(newSVpv(l->tosend, 0))); XPUSHs(sv_2mortal(newSVpv(l->sendas, 0))); PUTBACK; rc=perl_call_pv("BeforeSend", G_EVAL|G_ARRAY); SPAGAIN; // Hу и возвращается List... switch(rc){ case 3: pv_sendas = POPpx; if(!n_a) pv_sendas = NULL; if(pv_sendas){ sfree(l->sendas); l->sendas = strdup(pv_sendas); } case 2: pv_tosend = POPpx; if(!n_a) pv_tosend = NULL; if(pv_tosend){ sfree(l->tosend); l->tosend = strdup(pv_tosend); } case 1: iv_rc = POPi; case 0: break; default: write_log("PERL: wrong retval count from BeforeSend (%d)", rc); } PUTBACK; FREETMPS; LEAVE; // Вернули STDERR взад. unhandle_perl_err(save_err, pid); if(SvTRUE(ERRSV)){ errsv_pv = SvPV(ERRSV, n_a); if(errsv_pv[strlen(errsv_pv)-1] == '\n') errsv_pv[strlen(errsv_pv)-1] = 0; write_log("PERL: BeforeSend eval error: %s", errsv_pv); return 0; } return iv_rc; } return 0; } Regards, Sir Raorn. ... The reason computer chips are so small is computers don't eat much. --- GoldED+/LNX 1.1.4.6-sr Registered Linux User #177282 * Origin: ASHes to ASHes, DOS to DOS. (2:5020/1437.4) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/392839ce2c62.html, оценка из 5, голосов 10
|