Browse thread
RE: Marshaling of custom blocks and threads
- Manuel Fahndrich
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2000-11-30 (07:55) |
From: | Manuel Fahndrich <maf@m...> |
Subject: | RE: Marshaling of custom blocks and threads |
Here's another point to consider. I just submitted a bug report concerning serialization of custom blocks (I assume marshalling uses the serialization code). The deserialization code for custom blocks does not correctly reproduce sharing. Try writing a tuple of the same int64 data structure and reading it back via output_value, input_value. The second component of the built tuple is garbage. I submitted a fix which works for me: Add: At line 266 in file byterun/intern.c, insert the following line: if (intern_obj_table != NULL) intern_obj_table[obj_counter++] = v; There's a int64 related bug in byterun/ints.c. Change line:282 of byterun/ints.c < *wsize_64 = *wsize_64 = 8; > *wsize_32 = *wsize_64 = 8; This bug caused the size of the block to be allocated when reading int64 data back in to be wrong on 32bit architectures. -Manuel -----Original Message----- From: Gerd Stolpmann [mailto:gerd@gerd-stolpmann.de] Sent: Tuesday, November 28, 2000 5:22 PM To: Ken Wakita; jserot@lasmea.univ-bpclermont.fr Cc: caml-list@inria.fr Subject: Re: Marshaling of custom blocks and threads On Tue, 28 Nov 2000, Ken Wakita wrote: >I think the Marshal module is thread unsafe because it uses a shared >buffer to produce the external image of the ML objects. In 2.04, this was definitely true (see http://caml.inria.fr/bin/caml-bugs/fixed?id=24;page=1;user=guest and http://caml.inria.fr/bin/caml-bugs/fixed?id=25page=1;user=guest). However, the bug was still subtle; the shared buffers were relatively well protected by the so-called "master lock". Until now, I thought that 3.00 fixed the bug finally; i.e. the master lock really locked the shared buffer. (I checked the code.) Jocelyn Serot reports that Marshal is not thread-safe for custom blocks. These did not exist in 2.04, so I suppose that only the new parts of the marshalling system do not work properly enough. However, multi-threading programming is error-prone, so it would be helpful to have a small program that demonstrates the bug (normally it is sufficient to repeat the errorneous piece of code often enough (e.g. 10000 times) to reproduce the incorrect behaviour). Gerd -- ---------------------------------------------------------------------------- Gerd Stolpmann Telefon: +49 6151 997705 (privat) Viktoriastr. 100 64293 Darmstadt EMail: gerd@gerd-stolpmann.de Germany ----------------------------------------------------------------------------