- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一些 XS 代码来公开库的片段
Perl 代码作为可以写入的流接口(interface)。这get_stream
下面的函数应该是一个构造函数
准备并返回一个 PerlIO 对象。我想我只需要Write
和 Close
方法,所以我将所有其他功能槽留空。
typedef struct {
struct _PerlIO base;
mylib_context* ctx;
} PerlIOmylib;
/* [...] */
PERLIO_FUNCS_DECL(PerlIO_mylib_funcs) = {
.fsize = sizeof(PerlIO_funcs),
.name = "mylib",
.size = sizeof(PerlIOmylib,
.Write = mylib_write,
.Close = mylib_close,
};
/* XS below */
PerlIO*
get_stream (SV* context_obj)
CODE:
mylib_context* ctx = (mylib_context*) SvIV (SvRV (context_obj));
PerlIO* f = PerlIO_allocate (aTHX);
f = PerlIO_push (aTHX, f, PERLIO_FUNCS_CAST(&PerlIO_mylib_funcs), "a", NULL);
PerlIOSelf(f, PerlIOmylib)->ctx = ctx;
PerlIOBase(f)->flags |= PERLIO_F_OPEN;
RETVAL = f;
OUTPUT:
RETVAL
{
my $fh = MyLib::get_stream($lib_ctx);
print $fh "x" x 300;
}
mylib_write
函数被调用,所以我还没有完全
$fh
超出范围,就像正常工作的方式一样
open
创建的文件句柄.但目前,
mylib_close
函数仅在解释器关闭期间调用。
close
工作正常,设置
$fh
至
undef
做
Devel::Peek::Dump
和
sv_dump
发现句柄返回
get_stream
功能是“房车”
SV = PVGV(...)
. glob (
PVGV
) 有它的
CLEANUP:
SvREFCNT_dec (SvRV (ST(0)));
SvREFCNT_dec (SvRV (ST(0)));
close
$fh
时调用函数
OUTPUT
生成的 C 代码部分:
ST(0) = sv_newmortal();
{
GV *gv = newGVgen("MyLib");
if (do_open(gv, "+<&", 3, FALSE, 0, 0, RETVAL) )
sv_setsv(ST(0), sv_bless(newRV((SV*)gv), gv_stashpv("MyLib",1)));
else
ST(0) = &PL_sv_undef;
}
XSRETURN(1);
最佳答案
如果 close
在全局销毁时调用,这意味着您的句柄在全局销毁时仍然存在。你在泄密!
在 C/XS 代码中,可以使用 sv_dump(sv)
将标量转储到标准错误。在 Perl 代码中,您可以使用 Devel::Peek的Dump
获得相同的功能。这将向您显示引用计数。
在回答你的新问题时,
您有三个分配,但只有一个释放(来自 sv_2mortal 的延迟一个)。
gv
: 指针总是被丢弃。内存泄漏!gv
的 refcnt出错时,或者在使用 newRV_inc
后无条件地减少 refcnt打开成功时将所有权“转移”给 RV。 newRV
: 指针总是被丢弃。内存泄漏!{
GV *gv = newGVgen("MyLib");
if (!do_open(gv, "+<&", 3, FALSE, 0, 0, RETVAL) ) {
SvREFCNT_dec(gv);
XSRETURN_UNDEF;
}
ST(0) = sv_2mortal(sv_bless(newRV_noinc((SV*)gv), gv_stashpv("MyLib",1))));
XSRETURN(1);
}
关于perl - 为什么这个返回 PerlIO* 的 XS 代码会泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12729545/
“用 Haskell 进行函数式思考”中的练习之一是使用融合定律使程序更加高效。我在尝试复制答案时遇到了一些麻烦。 部分计算要求您将 maximum (xs++ map (x+) xs) 转换为 ma
我正在使用 XML 规范,它定义了一个“类型”“日期”,即: date: A union of xs:date, xs:gYearMonth, xs:gYear 以上数据类型来自W3C XML Sch
我很好奇替换是否正确 ... ... 与 ... ... 用javascript? 我所需要的只是隐藏第二个 div 并正确地通过 javascript 显示第一个 div 的 100%。实际完成的操
我有以下定义 Inductive subseq : list nat -> list nat -> Prop := | empty_subseq : subseq [] [] | add_right
可以在 xs:sequence 中使用 xs:choice 元素, ... 但不在 xs:all 内。这是为什么?这在解析 xml 时会产生一些歧义吗? 最佳答案 这只能由 XML Sch
我有一个场景,我需要一个 xsd,用于验证一些没有共同点的 xml。例如, xml1: .. .. .. xml2: .. .. 我需要一个通用的 xsd,以便验证具有“require
我必须与 WSDL 包含以下复杂类型的 Web 服务通信:
本文整理了Java中org.geotools.xs.XS.getInstance()方法的一些代码示例,展示了XS.getInstance()的具体用法。这些代码示例主要来源于Github/Stack
我正在尝试使用 HANA XS Javascript 实现简单的产品目录。目录的页面应该在服务器端呈现。 如何根据从 HANA 数据库读取的数据处理“动态”URL?例如,http:///myapp/s
当前在 Talend 上运行代码并抛出此错误 net.sf.saxon.trans.XPathException: Cannot compare xs:string to xs:integer at
split :: [a] -> Int -> ([a], [a]) split [xs] n = (take n [xs], drop n [xs]) 如果我将变量指定为 xs 而不是 [xs
免责声明:在 perlmonks 询问. 我希望我正确地描述和描述了我的问题......在 XS 中,我试图将回调发送到外部库的函数,其中回调具有 Perl 特定的函数。 XSUB 作为函数指针传递给
我对 XML Schema 还是有点陌生,我正在尝试在 Relax NG Compact 中做一些看起来像这样的事情: test = element test{ element A {text},
我有一个类似于以下的文档类型: abc true abc 以下文档在语义上与前面的文档相同: true abc
我正在尝试使用 xs:choice 元素,但是在验证 XSD 文件时,我收到一个错误,我认为它与 xs:choice 元素有关。我已经搜索了很多这个问题,找到了一些类似的问题,但没有一个给我我正在寻找
我想定义一个复杂类型,其中包含可能存在或不存在的元素,并且还允许其他未定义的元素,所以我有这样的东西: 我不想使用 强制执行订单所以我想改变至 但随后 不允许。有
如果 Reverse :: [k] -> [k]是一个类型族,那么 Haskell 无法判断 (Reverse (Reverse xs)) ~ xs .有没有办法让类型系统知道这一点而无需任何运行时成
我已经开始创建 XSD,并在 xs:integer 和 xs:int 的几个示例中找到了。 xs:integer 和 xs:int 之间有什么区别?我什么时候应该使用xs:integer?我什么时候应
我正在使用 Apache CXF 从 java 类创建自下而上的 Web 服务 在 java 类中,我将 java.util.Date 和 java.util.Calendar 用于两个字段 当 WS
我正在使用 Bootstrap 3 设计一个网站。我遇到过网格系统没有按预期工作的情况。 我试图将类设置为 visible-xs-6 col-xs-offset-3 最后一行中的 HTML5 Logo
我是一名优秀的程序员,十分优秀!