Hello,

On some systems t/pmc/io_6.pasm fails because of a double free. The
problem is that the clone call adds a reference to ParrotIO object,
but the ParrotIO object is neither garbage collected nor refcounted so
it gets destroyed when its first refrence is destroyed.

The solution of that memory problem is simple: just allocate a new
ParrotIO in the clone call.

But what should be the semantics of the cloned IO object?

What happens with interleaving writes?
  clone P1, P0
  print P1, "Hello"
  print P0, "World"
First come, first serve seems right to me here.

What about buffered io? Should the clone call flush the buffer, will
the new object just get an empty buffer or even copy over the buffer
data (this would lead to double output of the buffer).

What happens to seek/tell. Should every object have its own file
position pointer or should these be shared like in dup.

What is the semantics of double close. First close wins or last close
wins.

Comments
boe
-- 
Juergen Boemmels                        [EMAIL PROTECTED]
Fachbereich Physik                      Tel: ++49-(0)631-205-2817
Universitaet Kaiserslautern             Fax: ++49-(0)631-205-3906
PGP Key fingerprint = 9F 56 54 3D 45 C1 32 6F  23 F6 C7 2F 85 93 DD 47

Reply via email to