[EMAIL PROTECTED] wrote:
> Hi,
> 
> the problem I report here may be a real bug or simply the fact I did not find
> the correct option in cegcc ...
> It is related to structure packing that seems to be sometimes incompatible 
> with
> what WinCE API expects. See the example below :
> 
> =========================================================================================
> typedef struct MSGQUEUEOPTIONS_OS { // from msgqueue.h
>     DWORD dwSize;
>     DWORD dwFlags;
>     DWORD dwMaxMessages;
>     DWORD cbMaxMessage;
>     BOOL  bReadAccess;
> } MSGQUEUEOPTIONS, FAR *LPMSGQUEUEOPTIONS, *PMSGQUEUEOPTIONS;
> 
> static MSGQUEUEOPTIONS opt;
> 
> int sc_msg_init (ClientData cd, Tcl_Interp * ti, int argc, const char ** 
> argv) {
>   opt.dwSize = sizeof(MSGQUEUEOPTIONS);
>   opt.dwFlags = MSGQUEUE_NOPRECOMMIT;// |MSGQUEUE_ALLOW_BROKEN;
>   opt.dwMaxMessages = 0;
>   opt.cbMaxMessage = 1024;
>   opt.bReadAccess = FALSE;
>   hw = CreateMsgQueue( (LPCWSTR) "scid2toga", &opt );
>   if ( ! hw )
>     return errorResult (ti, "CreateMsgQueue w failed");
> 
>   opt.bReadAccess = TRUE;
>   hr = CreateMsgQueue( (LPCWSTR) "toga2scid", &opt );
>   if ( ! hr )
>     return errorResult (ti, "CreateMsgQueue r failed");
> 
>   return TCL_OK;
> }
> =======================================================================================
> 
> It works perfectly well and I can use message queues for IPC between a chess
> engine and the user interface.
> But if the variable "opt" is on the stack, that is defined as a local variable
> in function sc_msg_init, then sometimes, depending of the directory 
> installation
> of my application, the message queue took the wrong "opt.bReadAccess" 
> parameter,
> that is opened a queue "read-only" instead of "write-only" or the opposite. 

Are you sure it isn't just returning an already existing queue with
the same name?

> So I
> concluded that I have a problem in the way structures are packed using cegccc,
> problem that seems to disappear when using a global variable.
> I tried to play with "-mstructure-size-boundary" option without success, and I
> found no other option in cegcc that could solve this problem (and no real clue
> in evc4 documentation).
> 
> So *maybe* is there a bug here ? Or something I did not understand ?
> 

Maybe, although weird.  Is MSGQUEUEOPTIONS_OS #pragma pack(1)ed?
I don't think it should make a difference given that it is all 32-bit
fields, but we may have a bug there.  I suggest doing a few dumps, like
outputting all the bytes of the structure as a byte array, and outputting
its address, to see if it has anything to do with alignment.

Can you provide a preprocessed reduced testcase?  Quite hard to debug
it otherwise.




-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
Cegcc-devel mailing list
Cegcc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/cegcc-devel

Reply via email to