打电话解冻投掷分段故障

时间:2017-05-03 04:06:10

标签: perl segmentation-fault freeze-thaw

我正在使用 FreezeThaw模块 将序列化对象从客户端发送到服务器。它适用于具有有限数量条目的数组引用,但是当我为更大的祝福对象做同样的事情时服务器正在停止

  

分段错误(核心转储)

以下是我正在使用的内容

客户端:

<?php echo ($userinfo['c71st'] + $userinfo['c71st'] + $userinfo['c71st'])/2; ?>

服务器:

my $message = freeze $_[1]; # encode_json
$mq->publish($channel_id, $routing_key, $message);

当我使用下面的数组引用它到达服务器时,但是在打印之后,服务器会立即停止并出现分段错误。

my $message  = $payload->{body} ;
my @got = thaw $message;
print Dumper(@got);

1 个答案:

答案 0 :(得分:5)

冻结/解冻不会对NetSNMP::OID个对象起作用。

NetSNMP::OID使用XS code。 XS代码在C中分配数据结构,并使该数据的地址在Perl中可用。存储在Perl对象中的唯一数据,以及使用freezethaw保存和还原的唯一数据是该地址。该地址的内容将无法跨进程或跨越不同计算机上的客户端 - 服务器边界。

崩溃的发生是因为服务器采用的是基本上随机的内存地址,并尝试将其理解为netsnmp_oid_t data structure

您必须想出另一种方法来访问和序列化NetSNMP::OID对象的实际内容。