Hallo, it seems that mq_unlink and/or mq_open forget to close some handles (5 to be precise). How to test: Execute the following code and watch the number of handles in the windows task-manager (processes tab, you can add a column there). For me it increases by 5 with every loop.
Tested with this DLL: cygwin1-20110327.dll Thanks, Manuel #include <stdio.h> #include <stdlib.h> #include <mqueue.h> #include <string.h> #include <errno.h> #include <fcntl.h> #include <unistd.h> int main(void) { int res; int i = 0; char msgQueueTestName[] = "./testQueue"; mqd_t testQueue; struct mq_attr attrQueue; memset(&attrQueue,0x00,sizeof(attrQueue)); attrQueue.mq_maxmsg = 10; /* room for X messages in the queue */ attrQueue.mq_msgsize = 20; /* maximum size of a message */ while(1) { sleep(1); i++; printf("Loop #%d\n", i); fflush(stdout); // Remove old queues before trying to create a new one. res = mq_unlink(msgQueueTestName); if ((res == -1) && (errno != ENOENT)) { // Don't print anything if the queue can't be unlinked, because it doesn't exist. printf("Failed to unlink msg queue %s: %s %d\n", msgQueueTestName, sys_errlist[errno],errno); } testQueue = mq_open(msgQueueTestName, O_RDWR | O_CREAT | O_EXCL, S_IRWXU | S_IRWXG, &attrQueue); if( testQueue == (mqd_t)-1 ) { printf("Failed to open msg queue %s: %s %d\n", msgQueueTestName, sys_errlist[errno],errno); } res = mq_unlink(msgQueueTestName); if (res == -1) { printf("Failed to unlink msg queue %s: %s %d\n", msgQueueTestName, sys_errlist[errno],errno); } } return EXIT_SUCCESS; } -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple