On 15 February 2012 01:11, Igor Stasenko <siguc...@gmail.com> wrote: > On 15 February 2012 00:54, Milan Mimica <milan.mim...@gmail.com> wrote: >> On 14 February 2012 22:55, Igor Stasenko <siguc...@gmail.com> wrote: >>> >>> >>> semaphores collect: [:sema | >>> sema -> >>> (sema pointersTo reject: [:ptr | ptr == arr or: [ptr == >>> semaphores ] ] ) ] >>> >>> Can you try invoking it on your image , look for those who has an >>> empty array, which will mean that there is no references to it except >>> semaphore table itself. >> >> >> There is 69 of such semaphores, out of hundreds in total. Not much :-/ >> On a normal image there is only a few. >> > > So, we got a leak somewhere. Can you double-check, > this is semaphores which in the list which > when you inspect that list > will show entries like > > a Semaphore() -> #() > > but not a total number of entries. > > Oh, ok lets just change the code: > > | semaphores arr | > > arr := ExternalSemaphoreTable unprotectedExternalObjects. > semaphores := arr reject: #isNil. > > semaphores reject: [:sema | > (sema pointersTo reject: [:ptr | ptr == arr or: [ptr == > semaphores ] ] ) isEmpty not ] > > so, normally this code should answer an empty array. > If not, then there's leak >
btw, i found it strange that #pointersTo does not reports a context of closure, which apparently holds a strong reference to semaphore, i.e. the following must yield true: | sema | sema := Semaphore new. sema pointersTo includes: thisContext -- Best regards, Igor Stasenko.