lucy-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Serkan Mulayim <serkanmula...@gmail.com>
Subject [lucy-user] Re: C library - DECREFing PolySearcher
Date Fri, 06 Jan 2017 01:20:44 GMT
Sorry guys, 1 more update: when I build the app with -O2 and without -g,
the issue is gone. This makes me think that there is something wrong with
the timing, and related to threads. Just speculating :)

On Thu, Jan 5, 2017 at 5:08 PM, Serkan Mulayim <serkanmulayim@gmail.com>
wrote:

> Update: I can reproduce it with IndexSearcher too. Previously I had said
> that it was only happening in PolySearcher...
>
> On Thu, Jan 5, 2017 at 4:31 PM, Serkan Mulayim <serkanmulayim@gmail.com>
> wrote:
>
>> Hi guys,
>>
>> I have a question regarding the searchers (PolySearcher and
>> IndexSearcher).
>>
>> I wrote an application to do searching and indexing for 2 cases: 1-
>> unified index(searched via IndexSearcher) 2- splitted index (there are
>> around 12 indexes to be searched via PolySearcher). Both indexes have the
>> same number of documents in total.
>>
>> In order to make the application simpler, for every search query I create
>> the related searcher, do the search, and then close it (I do closing by
>> DECREF). So basically a searcher is created and removed.
>>
>> For the queries that do not have any results, for the IndexSearcher, I do
>> not see any issues. For the same query with Poly search, I receive the
>> following LLDB output. If I wait in the LLDB with a breakpoint before
>> DECREFing the PolySearcher this issue does not happen.
>>
>> Process 44678 stopped
>> * thread #1: tid = 0x325b47, 0x0000000100004c0a
>> test3searchs`cfish_dec_refcount(vself=0x0000000103abe060) + 10 at
>> clownfish.c:100, queue = 'com.apple.main-thread', stop reason =
>> EXC_BAD_ACCESS (code=1, address=0x28)
>>     frame #0: 0x0000000100004c0a test3searchs`cfish_dec_refcount(vself=0x0000000103abe060)
>> + 10 at clownfish.c:100
>>    97   cfish_dec_refcount(void *vself) {
>>    98      cfish_Obj *self = (Obj*)vself;
>>    99      cfish_Class *klass = self->klass;
>> -> 100    if (klass->flags & CFISH_fREFCOUNTSPECIAL) {
>>    101        if (SI_immortal(klass)) {
>>    102            return (uint32_t)self->refcount;
>>    103        }
>>
>>
>> I believe it is not directly related to the number of results returned.
>> But something happens when we try to DECREF very quickly. I see that we
>> need pthread. This makes me think that search and DECREF does not happen in
>> the same thread, but I do not want to be confusing so no more comments
>> regarding the threads :).
>>
>> Has anyone seen this issue? Do you have any suggestions? Is there a
>> concern in creating a new searcher and destroying it by DECREF every time
>> (other than a possible slowness)? Is there a better way to destroy a
>> searcher?
>>
>> Thanks,
>> Serkan
>>
>>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message