<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
You *might* imagine pickling a mutex, held or not, like to<BR>
"freeze"/"suspend" a running system, possibly to move to<BR>
another system, where it is "resumed".<BR>
 <BR>
 <BR>
But in reality, that won't work.<BR>
 <BR>
 <BR>
If changing alignment/padding won't break pickles, I again<BR>
suggest that "max_align" be raised to at least 64 for all architectures.<BR>
So that double and longint are aligned.<BR>
Or that max_align be thrown out entirely and have the architectures<BR>
all declare things correctly..which they likely already are.<BR>
 <BR>
 <BR>
 >  recreates the MUTEX in the environment of the reading program<BR>
 <BR>
Just with "NEW(MUTEX)" right?<BR>
No attempt to put it back in the same state, I assume.<BR>
 <BR>
 <BR>
 - Jay<BR><BR> <BR>> From: rcolebur@SCIRES.COM<BR>> To: m3devel@elegosoft.com<BR>> Date: Mon, 1 Feb 2010 14:37:48 -0500<BR>> Subject: Re: [M3devel] platform-independent packing/alignment?<BR>> <BR>> For MUTEX, you need to write a special pickler procedure that deals with them the way you want. For most of my code, I simply include a tag on output (writing) that is interpreted on input (reading) by my special pickler code that recreates the MUTEX in the environment of the reading program. If anyone wants the code, let me know and I'll send an example.<BR>> Regards,<BR>> Randy Coleburn<BR>> <BR>> -----Original Message-----<BR>> From: Dragiša Durić [mailto:dragisha@m3w.org] <BR>> Sent: Monday, February 01, 2010 3:42 AM<BR>> To: Mika Nystrom<BR>> Cc: m3devel@elegosoft.com<BR>> Subject: Re: [M3devel] platform-independent packing/alignment?<BR>> <BR>> MUTEX is primitive type whose typecode is fixed by compiler, IIRC - that<BR>> code being same even if changes were made to it's basic structure... Or<BR>> not... On the second thought, MUTEX is basically fixed, but it's<BR>> revealations can vary. Thus making it incompatible over<BR>> pickles/versions.<BR>> <BR>> I've not looked at my code/data yet, but MUTEX was only an idea what<BR>> went... It is OODBMS package, and mutex is not used for persistent data,<BR>> only for tables/indexes. Thus, problem (at leat for me) remains and it<BR>> is not pickled MUTEX.<BR>> <BR>> On Mon, 2010-02-01 at 00:19 -0800, Mika Nystrom wrote:<BR>> > For what it's worth...<BR>> > <BR>> > I recall someone (Dragisa?) just complained that he was having problems<BR>> > unpickling data structures...<BR>> > <BR>> > I have never had much luck pickling and unpickling MUTEXes, using a few<BR>> > (not very different) M3 compilers. I just leave them out of my pickles.<BR>> > It makes the pickles a lot more compatible across versions. I'm not<BR>> > talking recent CM3 versions here but a variety of old versions.<BR>> > Implementors have seemed to modify MUTEX quite a bit. What's the point<BR>> > of pickling it anyhow? If it's an active mutex the unpickling will<BR>> > surely lead to garbage, if there are wait queues and things.. then you<BR>> > wind up un/pickling Thread structures too.<BR>> > <BR>> > Mika<BR>> > <BR>> > Tony Hosking writes:<BR>> > ><BR>> > >--Apple-Mail-4--1058110347<BR>> > >Content-Transfer-Encoding: quoted-printable<BR>> > >Content-Type: text/plain;<BR>> > > charset=utf-8<BR>> > ><BR>> > >That shouldn't affect things since the pickler picks apart the =<BR>> > >structures and ships the individual primitives. Right?<BR>> > ><BR>> > >On 1 Feb 2010, at 02:41, Jay K wrote:<BR>> > ><BR>> > >> Let's say I have:<BR>> > >> =20<BR>> > >> =20<BR>> > >> TYPE FOO =3D RECORD a: LONGFLOAT; b: UINT32; END;<BR>> > >> TYPE FOOA =3D ARRAY [0..1] OF FOO;<BR>> > >> =20<BR>> > >> =20<BR>> > >> And I have a platform with max_align =3D 32 and a platform with =<BR>> > >max_align =3D 64.<BR>> > >> One platform will make FOOA be 24 bytes, the other 32.<BR>> > >> One platform will pad out FOO to be align the 8 byte LONGFLOAT, one =<BR>> > >won't.<BR>> > >> Can that pickle be read/written by the two platforms?<BR>> > >> And how does the code know/detect the difference?<BR>> > >> That is, if a platform changed from max_align =3D 32 to 64, would the =<BR>> > >pickle code work just<BR>> > >> as well on the "same" platform as on the "different" platforms?<BR>> > >> =20<BR>> > >> =20<BR>> > >> I very recently changed NT386 max_align from 32 to 64, and I believe<BR>> > >> the remaining active platforms with max_align =3D 32 should also be =<BR>> > >64.<BR>> > >> It would "only" affect pickles with LONGINT or LONGFLOAT, as well<BR>> > >> as "lining up" such structs with C.<BR>> > >> =20<BR>> > >> =20<BR>> > >> Such alignment shold make us not need the extra "unaligned double" =<BR>> > >switch<BR>> > >> on most platforms (some mystery still on some platforms) as well as<BR>> > >> perhaps be needed for some atomic operations, esp. maybe on<BR>> > >> LONGINT on 32bit x86.<BR>> > >> =20<BR>> > >> =20<BR>> > >> - Jay<BR>> > >>=20<BR>> > >> =20<BR>> > >> > From: dragisha@m3w.org<BR>> > >> > To: rodney_bates@lcwb.coop<BR>> > >> > Date: Sun, 31 Jan 2010 22:14:47 +0100<BR>> > >> > CC: m3devel@elegosoft.com<BR>> > >> > Subject: Re: [M3devel] platform-independent packing/alignment?<BR>> > >> >=20<BR>> > >> > I've not changed my code, that is for sure.... But now I am not sure<BR>> > >> > some parent type (esp MUTEX here an there) was not changed... I'll =<BR>> > >take<BR>> > >> > a look on this again sometime soon and report my findings.<BR>> > >> >=20<BR>> > >> > Thanks for clues.<BR>> > >> >=20<BR>> > >> > On Sun, 2010-01-31 at 14:00 -0600, Rodney M. Bates wrote:<BR>> > >> > >=20<BR>> > >> > > Dragi=C5=A1a Duri=C4=87 wrote:<BR>> > >> > > > I've asked this before, but didn't catch answer:<BR>> > >> > > >=20<BR>> > >> > > > On Sun, 2010-01-31 at 12:21 +0000, Jay K wrote:<BR>> > >> > > >> I suggest we can probably get by with platform-independent<BR>> > >> > > >> packing/alignment settings.<BR>> > >> > > >=20<BR>> > >> > > > Some time ago I've used pickles (CM3) to save some data... My =<BR>> > >program<BR>> > >> > > > does not read that pickle anymore....=20<BR>> > >> > >=20<BR>> > >> > > And you are certain your program that tries to read still contains<BR>> > >> > > exact structurally equivalent types to all the types in the =<BR>> > >pickle?<BR>> > >> > >=20<BR>> > >> > > >=20<BR>> > >> > > > Someone remembers moment when this incompatible changes were =<BR>> > >made?=20<BR>> > >> > --=20<BR>> > >> > Dragi=C5=A1a Duri=C4=87 <dragisha@m3w.org><BR>> > >> >=20<BR>> > ><BR>> > ><BR>> > >--Apple-Mail-4--1058110347<BR>> > >Content-Transfer-Encoding: quoted-printable<BR>> > >Content-Type: text/html;<BR>> > > charset=utf-8<BR>> > ><BR>> > ><html><head><base href=3D"x-msg://140/"></head><body style=3D"word-wrap: =<BR>> > >break-word; -webkit-nbsp-mode: space; -webkit-line-break: =<BR>> > >after-white-space; ">That shouldn't affect things since the pickler =<BR>> > >picks apart the structures and ships the individual primitives. =<BR>> > >&nbsp;Right?<div><BR>> > ><br><div><div>On 1 Feb 2010, at 02:41, Jay K wrote:</div><br =<BR>> > >class=3D"Apple-interchange-newline"><blockquote type=3D"cite"><span =<BR>> > >class=3D"Apple-style-span" style=3D"border-collapse: separate; =<BR>> > >font-family: Helvetica; font-size: medium; font-style: normal; =<BR>> > >font-variant: normal; font-weight: normal; letter-spacing: normal; =<BR>> > >line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; =<BR>> > >white-space: normal; widows: 2; word-spacing: 0px; =<BR>> > >-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: =<BR>> > >0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: =<BR>> > >auto; -webkit-text-stroke-width: 0px; "><div class=3D"hmmessage" =<BR>> > >style=3D"font-size: 10pt; font-family: Verdana; ">Let's say I =<BR>> > >have:<br>&nbsp;<br>&nbsp;<br>TYPE FOO =3D RECORD a: LONGFLOAT; b: =<BR>> > >UINT32; END;<br>TYPE FOOA =3D&nbsp;ARRAY [0..1] OF =<BR>> > >FOO;<br>&nbsp;<br>&nbsp;<br>And I&nbsp;have a platform with max_align =<BR>> > >=3D&nbsp;32 and a platform with max_align =3D 64.<br>One platform will =<BR>> > >make FOOA be&nbsp;24 bytes, the other 32.<br>&nbsp; One platform will =<BR>> > >pad out FOO to be align the 8 byte LONGFLOAT, one won't.<br>Can that =<BR>> > >pickle be read/written by the two platforms?<br>And how does the code =<BR>> > >know/detect the difference?<br>That is, if a platform changed from =<BR>> > >max_align&nbsp;=3D&nbsp;32 to 64, would the pickle code work just<br>as =<BR>> > >well on the "same" platform as on the "different" =<BR>> > >platforms?<br>&nbsp;<br>&nbsp;<br>I very recently changed NT386 =<BR>> > >max_align from 32 to 64, and I believe<br>the remaining active platforms =<BR>> > >with max_align =3D 32 should also be 64.<br>It would "only" affect =<BR>> > >pickles with LONGINT or LONGFLOAT, as well<br>as "lining up" such =<BR>> > >structs with C.<br>&nbsp;<br>&nbsp;<br>Such alignment shold make us not =<BR>> > >need the extra "unaligned double" switch<br>on most platforms (some =<BR>> > >mystery still on some platforms) as well as<br>perhaps be needed for =<BR>> > >some atomic operations, esp. maybe on<br>LONGINT on 32bit =<BR>> > >x86.<br>&nbsp;<br>&nbsp;<br>&nbsp;- Jay<br><br>&nbsp;<br>&gt; From:<span =<BR>> > >class=3D"Apple-converted-space">&nbsp;</span><a =<BR>> > >href=3D"mailto:dragisha@m3w.org">dragisha@m3w.org</a><br>&gt; To:<span =<BR>> > >class=3D"Apple-converted-space">&nbsp;</span><a =<BR>> > >href=3D"mailto:rodney_bates@lcwb.coop">rodney_bates@lcwb.coop</a><br>&gt; =<BR>> > >Date: Sun, 31 Jan 2010 22:14:47 +0100<br>&gt; CC:<span =<BR>> > >class=3D"Apple-converted-space">&nbsp;</span><a =<BR>> > >href=3D"mailto:m3devel@elegosoft.com">m3devel@elegosoft.com</a><br>&gt; =<BR>> > >Subject: Re: [M3devel] platform-independent =<BR>> > >packing/alignment?<br>&gt;<span =<BR>> > >class=3D"Apple-converted-space">&nbsp;</span><br>&gt; I've not changed =<BR>> > >my code, that is for sure.... But now I am not sure<br>&gt; some parent =<BR>> > >type (esp MUTEX here an there) was not changed... I'll take<br>&gt; a =<BR>> > >look on this again sometime soon and report my findings.<br>&gt;<span =<BR>> > >class=3D"Apple-converted-space">&nbsp;</span><br>&gt; Thanks for =<BR>> > >clues.<br>&gt;<span class=3D"Apple-converted-space">&nbsp;</span><br>&gt; =<BR>> > >On Sun, 2010-01-31 at 14:00 -0600, Rodney M. Bates wrote:<br>&gt; =<BR>> > >&gt;<span class=3D"Apple-converted-space">&nbsp;</span><br>&gt; &gt; =<BR>> > >Dragi=C5=A1a Duri=C4=87 wrote:<br>&gt; &gt; &gt; I've asked this before, =<BR>> > >but didn't catch answer:<br>&gt; &gt; &gt;<span =<BR>> > >class=3D"Apple-converted-space">&nbsp;</span><br>&gt; &gt; &gt; On Sun, =<BR>> > >2010-01-31 at 12:21 +0000, Jay K wrote:<br>&gt; &gt; &gt;&gt; I suggest =<BR>> > >we can probably get by with platform-independent<br>&gt; &gt; &gt;&gt; =<BR>> > >packing/alignment settings.<br>&gt; &gt; &gt;<span =<BR>> > >class=3D"Apple-converted-space">&nbsp;</span><br>&gt; &gt; &gt; Some =<BR>> > >time ago I've used pickles (CM3) to save some data... My program<br>&gt; =<BR>> > >&gt; &gt; does not read that pickle anymore....<span =<BR>> > >class=3D"Apple-converted-space">&nbsp;</span><br>&gt; &gt;<span =<BR>> > >class=3D"Apple-converted-space">&nbsp;</span><br>&gt; &gt; And you are =<BR>> > >certain your program that tries to read still contains<br>&gt; &gt; =<BR>> > >exact structurally equivalent types to all the types in the =<BR>> > >pickle?<br>&gt; &gt;<span =<BR>> > >class=3D"Apple-converted-space">&nbsp;</span><br>&gt; &gt; &gt;<span =<BR>> > >class=3D"Apple-converted-space">&nbsp;</span><br>&gt; &gt; &gt; Someone =<BR>> > >remembers moment when this incompatible changes were made?<span =<BR>> > >class=3D"Apple-converted-space">&nbsp;</span><br>&gt; --<span =<BR>> > >class=3D"Apple-converted-space">&nbsp;</span><br>&gt; Dragi=C5=A1a =<BR>> > >Duri=C4=87 &lt;<a =<BR>> > >href=3D"mailto:dragisha@m3w.org">dragisha@m3w.org</a>&gt;<br>&gt;<span =<BR>> > >class=3D"Apple-converted-space">&nbsp;</span><br></div></span></blockquote=<BR>> > >></div><br></div></body></html>=<BR>> > ><BR>> > >--Apple-Mail-4--1058110347--<BR>> -- <BR>> Dragiša Durić <dragisha@m3w.org><BR>> <BR>                                    </body>
</html>