Mail Archives: cygwin/2011/04/19/21:11:22
On Tue, Apr 19, 2011 at 11:31:38PM +0200, Peter Rosin wrote:
>Den 2011-04-18 21:23 skrev Peter Rosin:
>> Den 2011-04-18 17:28 skrev Christopher Faylor:
>>> On Mon, Apr 18, 2011 at 11:24:41AM -0400, Christopher Faylor wrote:
>>>> On Mon, Apr 18, 2011 at 04:32:10PM +0200, Peter Rosin wrote:
>>>>> Den 2011-04-18 14:23 skrev Peter Rosin:
>>>>>> Den 2011-04-18 13:43 skrev Peter Rosin:
>>>>>>> Hi!
>>>>>>>
>>>>>>> Using the following STC, I'm seeing what appears to be a memory
>>>>>>> leak in select(2).
>>>>>>>
>>>>>> ----------------8<---(selectleak.c)---------
>>>>>> #include <sys/time.h>
>>>>>> #include <fcntl.h>
>>>>>>
>>>>>> int
>>>>>> main(void)
>>>>>> {
>>>>>> fd_set fdset;
>>>>>>
>>>>>> long flags = fcntl(0, F_GETFL);
>>>>>> fcntl(0, F_SETFL, flags | O_NONBLOCK);
>>>>>>
>>>>>> for (;;) {
>>>>>> int res;
>>>>>> char buf[20];
>>>>>>
>>>>>> FD_ZERO(&fdset);
>>>>>> FD_SET(0, &fdset);
>>>>>> res = select(1, &fdset, NULL, NULL, NULL);
>>>>>> if (!res)
>>>>>> continue;
>>>>>> if (res < 0)
>>>>>> return 1;
>>>>>> res = read(0, buf, sizeof(buf));
>>>>>> if (!res)
>>>>>> break;
>>>>>> if (res < 0)
>>>>>> return 1;
>>>>>> }
>>>>>>
>>>>>> return 0;
>>>>>> }
>>>>>> ----------------8<--------------------------
>>>>>
>>>>> Ok, I'm taking a wild swing at this, and my guess is that the call
>>>>> sel.cleanup () in cygwin_select prematurely zeros out the cleanup
>>>>> member of the select_record. The call to sel.poll () then adds
>>>>> "stuff" to the select_record that really should have been cleaned
>>>>> up, but isn't since cleanup has already been executed and then
>>>>> zapped (by select_stuff::cleanup).
>>>>>
>>>>> But what do I know?
>>>>
>>>> How does sel.poll add "stuff" that should be cleaned up? That function
>>>> only looks for bits to set.
>>
>> I shouldn't have included the strace, and I shouldn't have guessed about
>> the cause of the problem without verifying my claims. Sorry about that.
>> But for the record the included strace snippet is reoccurring like that
>> many many times (the address of the allocation that isn't freed is
>> moving). Further evidence; the STC leaks 1 MB every 3 seconds on my
>> computer, that just can't be right.
>
>Back with a patch this time. Fixes it for me...
>
>Cheers,
>Peter
>
>2011-04-19 Peter Rosin <peda AT lysator DOT liu DOT se>
>
> * select.cc (pipe_cleanup): Don't leak a select_pipe_info when a
> thread turned out not to be needed.
Makes sense. I've checked this in (with a different ChangeLog).
Thanks for the patch.
cgf
--
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
- Raw text -