调用解冻抛出分段错误
Call to thaw throwing segmentation fault
我正在使用
FreezeThaw
模块
将序列化对象从客户端发送到服务器。对于条目数量有限的数组引用,它工作正常,但是当我对更大的祝福对象数组执行相同操作时,服务器将停止
Segmentation fault (core dumped)
下面是我正在使用的
客户:
my $message = freeze $_[1]; # encode_json
$mq->publish($channel_id, $routing_key, $message);
服务器:
my $message = $payload->{body} ;
my @got = thaw $message;
print Dumper(@got);
当我使用下面的数组引用时,它到达服务器,但在它打印后,服务器立即停止并出现分段错误。
$VAR1 = [
[
bless( {
'oidptr' => bless( do{\(my $o = '140488241049968')}, 'netsnmp_oidPtr' )
}, 'NetSNMP::OID' ),
'600',
67
],
... approximately 200 lines repeated
Freeze/thaw 不适用于 NetSNMP::OID
个对象。
NetSNMP::OID
使用 XS code。 XS 代码在 C 中分配一个数据结构,并使该数据的地址在 Perl 中可用。存储在 Perl 对象中的唯一数据,以及使用 freeze
和 thaw
保存和恢复的唯一数据是该地址。该地址的内容将无法跨进程或跨不同机器上的客户端-服务器边界存在。
发生崩溃是因为服务器采用基本上是随机内存地址的内容,并试图将其理解为 netsnmp_oid_t
data structure。
您将不得不想出另一种方法来访问和序列化 NetSNMP::OID
对象的实际内容。
我正在使用
FreezeThaw
模块
将序列化对象从客户端发送到服务器。对于条目数量有限的数组引用,它工作正常,但是当我对更大的祝福对象数组执行相同操作时,服务器将停止
Segmentation fault (core dumped)
下面是我正在使用的
客户:
my $message = freeze $_[1]; # encode_json
$mq->publish($channel_id, $routing_key, $message);
服务器:
my $message = $payload->{body} ;
my @got = thaw $message;
print Dumper(@got);
当我使用下面的数组引用时,它到达服务器,但在它打印后,服务器立即停止并出现分段错误。
$VAR1 = [
[
bless( {
'oidptr' => bless( do{\(my $o = '140488241049968')}, 'netsnmp_oidPtr' )
}, 'NetSNMP::OID' ),
'600',
67
],
... approximately 200 lines repeated
Freeze/thaw 不适用于 NetSNMP::OID
个对象。
NetSNMP::OID
使用 XS code。 XS 代码在 C 中分配一个数据结构,并使该数据的地址在 Perl 中可用。存储在 Perl 对象中的唯一数据,以及使用 freeze
和 thaw
保存和恢复的唯一数据是该地址。该地址的内容将无法跨进程或跨不同机器上的客户端-服务器边界存在。
发生崩溃是因为服务器采用基本上是随机内存地址的内容,并试图将其理解为 netsnmp_oid_t
data structure。
您将不得不想出另一种方法来访问和序列化 NetSNMP::OID
对象的实际内容。