uclibc(1.0.12) mq_send return value and errno issue

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

uclibc(1.0.12) mq_send return value and errno issue

Frank Liu
Hi All,

Kernel version : 4.4.19-linux4sam_5.4
uclibc version : 1.0.12
uclibc threading support : NPTL
Processor Arch: ARM

We create a NONBLOCKING message queue.

The expected behavior is when the message queue is full, calling mq_send would return -1 and set errno to EAGAIN(11). However we are seeing some inconsistent behaviors of mq_send.

When calling mq_send in a single threaded environment, the expected behavior is observed.

If the program starts a second thread, which is doing completely different task, calling mq_send when the queue is full would return -11 instead of -1. Also, the errno is set to an incorrect value. Values we have seen are 0, 2, which are completely different from the expected EAGAIN(11).

Frank

--
IMPORTANTPrivileged - Private & Confidential This email and files transmitted with it are intended solely for the use of the addressee (s) and may contain information which is confidential or privileged. If you are not the intended recipient, be aware that any disclosure, copying, distribution or use of this email or any attachment is prohibited. If you receive this email and you are not the addressee, or you have received this email in error, please disregard the contents of the email, delete the email and notify the author immediately. It is your responsibility to check any email attachments for email viruses before opening or sending them on.

 

_______________________________________________
uClibc mailing list
[hidden email]
http://lists.busybox.net/mailman/listinfo/uclibc
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: uclibc(1.0.12) mq_send return value and errno issue

Waldemar Brodkorb
Hi,
Frank Liu wrote,

> Hi All,
>
> Kernel version : 4.4.19-linux4sam_5.4
> uclibc version : 1.0.12
> uclibc threading support : NPTL
> Processor Arch: ARM

Better you switch to uClibc-ng mailinglist for this question.
 
> We create a NONBLOCKING message queue.
>
> The expected behavior is when the message queue is full, calling mq_send would return -1 and set errno to EAGAIN(11). However we are seeing some inconsistent behaviors of mq_send.
>
> When calling mq_send in a single threaded environment, the expected behavior is observed.
>
> If the program starts a second thread, which is doing completely different task, calling mq_send when the queue is full would return -11 instead of -1. Also, the errno is set to an incorrect value. Values we have seen are 0, 2, which are completely different from the expected EAGAIN(11).

Can you provide a simple test case to check the behaviour?

best regards
 Waldemar
_______________________________________________
uClibc mailing list
[hidden email]
http://lists.busybox.net/mailman/listinfo/uclibc
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

RE: uclibc(1.0.12) mq_send return value and errno issue

Frank Liu
Please see the attached sample code.

If I  turn READERS and WRITERS to 0, the test works fine.

Adding another thread in the process by setting a non-zero number to either READERS or WRITER, the test program crashes due to the assertion at line 99.

Regards

-----Original Message-----
From: Waldemar Brodkorb [mailto:[hidden email]]
Sent: Friday, November 18, 2016 5:13 PM
To: Frank Liu
Cc: '[hidden email]'; [hidden email]; Dushara Jayasinghe ([hidden email])
Subject: Re: uclibc(1.0.12) mq_send return value and errno issue

Hi,
Frank Liu wrote,

> Hi All,
>
> Kernel version : 4.4.19-linux4sam_5.4
> uclibc version : 1.0.12
> uclibc threading support : NPTL
> Processor Arch: ARM

Better you switch to uClibc-ng mailinglist for this question.
 
> We create a NONBLOCKING message queue.
>
> The expected behavior is when the message queue is full, calling mq_send would return -1 and set errno to EAGAIN(11). However we are seeing some inconsistent behaviors of mq_send.
>
> When calling mq_send in a single threaded environment, the expected behavior is observed.
>
> If the program starts a second thread, which is doing completely different task, calling mq_send when the queue is full would return -11 instead of -1. Also, the errno is set to an incorrect value. Values we have seen are 0, 2, which are completely different from the expected EAGAIN(11).

Can you provide a simple test case to check the behaviour?

best regards
 Waldemar
--
 
Click here to report this message as spam:
https://console.mailguard.com.au/ras/1PGczunkCB/3fSLfL9xJIP2MKuhQDEQvo/1.5

--
IMPORTANTPrivileged - Private & Confidential This email and files transmitted with it are intended solely for the use of the addressee (s) and may contain information which is confidential or privileged. If you are not the intended recipient, be aware that any disclosure, copying, distribution or use of this email or any attachment is prohibited. If you receive this email and you are not the addressee, or you have received this email in error, please disregard the contents of the email, delete the email and notify the author immediately. It is your responsibility to check any email attachments for email viruses before opening or sending them on.

 


_______________________________________________
uClibc mailing list
[hidden email]
http://lists.busybox.net/mailman/listinfo/uclibc

errnotest.c (3K) Download Attachment
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: uclibc(1.0.12) mq_send return value and errno issue

Waldemar Brodkorb
Hi Frank,
Frank Liu wrote,

> Please see the attached sample code.
>
> If I  turn READERS and WRITERS to 0, the test works fine.
>
> Adding another thread in the process by setting a non-zero number to either READERS or WRITER, the test program crashes due to the assertion at line 99.

I think I found the reason for the problem.

Try attached patch,

best regards
 Waldemar

_______________________________________________
uClibc mailing list
[hidden email]
http://lists.busybox.net/mailman/listinfo/uclibc

0001-arm-use-common-ret_ERRVAL.patch (793 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

RE: uclibc(1.0.12) mq_send return value and errno issue

Frank Liu
Hi Waldemar,

Thanks for the patchset. I can confirm it fixed my issue.

Regards
Frank

-----Original Message-----
From: Waldemar Brodkorb [mailto:[hidden email]]
Sent: Thursday, November 24, 2016 2:27 PM
To: Frank Liu
Cc: Waldemar Brodkorb; '[hidden email]'; Dushara Jayasinghe ([hidden email]); [hidden email]
Subject: Re: uclibc(1.0.12) mq_send return value and errno issue

Hi Frank,
Frank Liu wrote,

> Please see the attached sample code.
>
> If I  turn READERS and WRITERS to 0, the test works fine.
>
> Adding another thread in the process by setting a non-zero number to either READERS or WRITER, the test program crashes due to the assertion at line 99.

I think I found the reason for the problem.

Try attached patch,

best regards
 Waldemar
--
 
Click here to report this message as spam:
https://console.mailguard.com.au/ras/1PICBK8R7h/5zv7PHEQq8uVVrlQrJoc9i/0

--
IMPORTANTPrivileged - Private & Confidential This email and files transmitted with it are intended solely for the use of the addressee (s) and may contain information which is confidential or privileged. If you are not the intended recipient, be aware that any disclosure, copying, distribution or use of this email or any attachment is prohibited. If you receive this email and you are not the addressee, or you have received this email in error, please disregard the contents of the email, delete the email and notify the author immediately. It is your responsibility to check any email attachments for email viruses before opening or sending them on.

 

_______________________________________________
uClibc mailing list
[hidden email]
http://lists.busybox.net/mailman/listinfo/uclibc
Loading...