Problem with dice when fpage are used with derivation
Ronald Aigner
ra3 at os.inf.tu-dresden.de
Wed Feb 27 17:25:49 CET 2008
Marc CHALAND wrote on 02/27/2008 04:42 PM this:
> Hi,
>
> I don't have time to do more checking on L4Linux. Today, I use dice
> r238 of public repository of TUDOS. All my tasks are pure L4env ones.
> I try to process an idl which is quite long. Here is a sample :
>
> library myapp {
> [uuid(2)]
> interface connection {
> int syn([out] unsigned long *page_in_base);
> int ack([in] fpage page_in,
> [in] unsigned long page_out_base,
> [out] fpage *page_out);
> int rst(void);
> };
> };
>
> I create one interface which derives from myapp::connection :
>
> library myapp_server {
> interface server : myapp::configuration,
> myapp::connection,
> myapp::key {
> };
> };
>
>
> Dice generates files. One of them is very strange. On server side,
> file corresponding to myapp_server contains following code :
>
> inline
> long
> myapp_server_reply_and_wait (CORBA_Object _dice_corba_obj,
> l4_msgtag_t *_dice_tag,
> myapp_server_msg_buffer_t *_dice_msg_buffer,
> CORBA_Server_Environment *_dice_corba_env)
> {
> long _dice_opcode = 0;
> l4_msgtag_t tagdummy __attribute__ ((unused)) = l4_msgtag(0,0,0,0);
> l4_msgdope_t _dice_result = { msgdope: 0 };
> if ((_dice_msg_buffer->_word._dice_send_dope.md.dwords <= 2) &&
> (_dice_msg_buffer->_word._dice_send_dope.md.strings == 0))
> [ZAP]
> /* clear exception if set*/
> if (DICE_EXPECT_FALSE(DICE_HAS_EXCEPTION(_dice_corba_env)))
> CORBA_server_exception_set(_dice_corba_env,
> CORBA_NO_EXCEPTION,
> CORBA_DICE_EXCEPTION_NONE,
> 0);
> /* test for IPC errors */
> if (DICE_EXPECT_FALSE(L4_IPC_IS_ERROR(_dice_result)))
> {
> _dice_opcode = 0;
> _dice_msg_buffer->_word._word[0] = 0;
> if (DICE_IS_NO_EXCEPTION(_dice_corba_env))
> CORBA_server_exception_set(_dice_corba_env,
> CORBA_SYSTEM_EXCEPTION,
> CORBA_DICE_INTERNAL_IPC_ERROR,
> 0);
> return _dice_opcode;
> }
> if (l4_ipc_fpage_received(_dice_result))
> _dice_opcode = _dice_msg_buffer->_word._word[2];
> else
> _dice_opcode = _dice_msg_buffer->_word._word[0];
> return _dice_opcode;
> }
>
> By adding some logging, I realized that when fpage is received, opcode
> is not into _word[2] but _word[4].
You are right. That's a bug. Please find attached the patch for this
bug. It (hopefully) is in public repository tomorrow.
Regards, Ron.
--
Mit freundlichen Gruessen / with regards
ra3 @ inf.tu-dresden.de
http://os.inf.tu-dresden.de/~ra3/
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: dice.diff
URL: <http://os.inf.tu-dresden.de/pipermail/l4-hackers/attachments/20080227/ceadaaf1/attachment-0001.ksh>
More information about the l4-hackers
mailing list