[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
[email protected]
https://lists.sourceforge.net/lists/listinfo/cegcc-devel