1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
|
# File 'lib/alib-0.5.1/util.rb', line 1230
def child_object
r, w = IO.pipe
IO.popen('-') do |pipe|
if pipe
w.close
buf = pipe.read
Process.wait
unless $? == 0
loaded = Marshal.load r.read
case loaded
when Exception
raise loaded
else
klass, message, backtrace = loaded
e = klass.new message
e.set_backtrace backtrace
raise e
end
end
Marshal.load(buf)
else
r.close
begin
print(Marshal.dump(yield))
rescue Exception => e
dumped =
begin
Marshal.dump e
rescue
Marshal.dump [e.class, e.message, e.backtrace]
end
w.write dumped
exit! 42
end
end
end
ensure
r.close rescue nil
end
|