Message queue support
Jose Miguel Goncalves
jose.goncalves@inov.pt
Fri Jun 27 20:13:00 GMT 2003
Jeff,
I have found another bug in mq_open(). When called more than once (for the
same queue) with O_CREAT flag set, it fails. Sugested patch:
===================================================================
RCS file: /cvs/src/src/newlib/libc/sys/linux/mq_open.c,v
retrieving revision 1.3
diff -p -u -r1.3 mq_open.c
--- mq_open.c 27 Jun 2003 00:00:48 -0000 1.3
+++ mq_open.c 27 Jun 2003 14:53:04 -0000
@@ -98,7 +98,8 @@ mq_open (const char *name, int oflag, ..
return (mqd_t)-1;
}
errno = saved_errno;
- created = 1;
+ if (fd >= 0)
+ created = 1;
}
if (fd < 0)
@@ -132,9 +133,12 @@ mq_open (const char *name, int oflag, ..
saved_errno = errno;
semid = semget (key, 6, IPC_CREAT | IPC_EXCL | mode);
errno = saved_errno;
- /* now that we have created the semaphore, we should initialize it */
if (semid != -1)
+ /* now that we have created the semaphore, we should initialize it */
semctl (semid, 0, SETVAL, arg);
+ else
+ /* semaphore already exists, so we get only it's id */
+ semid = semget (key, 6, 0);
}
else
{
Regards,
José Gonçalves
J. Johnston wrote:
> Jose,
>
> I found a serious problem with opening an existing queue for read
> whereby the
> read/write buffers were not being allocated. A patch has been committed
> to the
> sources. With that patch applied I was able to run your test case
> successfully.
>
> -- Jeff J.
>
> Jose Miguel Goncalves wrote:
>
>> Jeff,
>>
>> After setting up /dev/shm I could create a queue with mq_open(), and
>> send messages with mq_send(), but calling to mq_receive() returns
>> errors - "Bad address".
>> I attach the source code for the simple mqueue test application that
>> I'm using. I am compiling in a 2.4.21 linux kernel with:
>>
>> $ gcc -static -nostdlib -g -Wall -D_REENTRANT
>> -I/usr/local/newlib/i686-pc-linux-gnu/include
>> /usr/local/newlib/i686-pc-linux-gnu/lib/crt0.o test_thread_queue.c
>> -L/usr/local/newlib/i686-pc-linux-gnu/lib -lpthread -lc -lgcc -o
>> test_thread_queue
>>
>> The same source compiled in a Sun Solaris 8 machine (with native
>> support for pthreads and mqueues) works fine.
>>
>> Regards,
>> José Gonçalves
>>
More information about the Newlib
mailing list