Пример #1
0
LIB_EXPORT rc_t CC KQueueRelease ( const KQueue *cself )
{
    KQueue *self = ( KQueue* ) cself;
    if ( cself != NULL )
    {
        if ( atomic32_dec_and_test ( & self -> refcount ) )
            return KQueueWhack ( self );
    }
    return 0;
}
Пример #2
0
LIB_EXPORT rc_t CC KConditionRelease ( const KCondition *cself )
{
    KCondition *self = ( KCondition* ) cself;
    if ( cself != NULL )
    {
        if ( atomic32_dec_and_test ( & self -> refcount ) )
            return KConditionWhack ( self );
    }
    return 0;
}
Пример #3
0
LIB_EXPORT rc_t CC KColumnBlobRelease ( const KColumnBlob *cself )
{
    KColumnBlob *self = ( KColumnBlob* ) cself;
    if ( cself != NULL )
    {
        if ( atomic32_dec_and_test ( & self -> refcount ) )
            return KColumnBlobWhack ( self );
    }
    return 0;
}
Пример #4
0
/* Release
 *  discard reference to file
 *  ignores NULL references
 */
LIB_EXPORT rc_t CC KFileFormatRelease ( const KFileFormat *cself )
{
    FUNC_ENTRY();
    if (cself != NULL)
    {
	KFileFormat *self = (KFileFormat*)cself;
        if (atomic32_dec_and_test (&self->refcount))
	    return  KFileFormatDestroy (self);
    }
    return 0;
}
Пример #5
0
static DWORD WINAPI int_ThreadProc( LPVOID lpParameter )
{
    KThread *self = ( KThread * )lpParameter;

    /* run the function */
    self -> rc = ( * self -> run ) ( self, self -> data );

    /* release thread's reference */
    if ( atomic32_dec_and_test ( & self -> refcount ) )
        free ( self );

    return 0;
}
Пример #6
0
LIB_EXPORT rc_t CC KRWLockRelease ( const KRWLock *cself )
{
    KRWLock *self = ( KRWLock* ) cself;
    if ( cself != NULL )
    {
        if ( atomic32_dec_and_test ( & self -> refcount ) )
        {
            atomic32_set ( & self -> refcount, 1 );
            return KRWLockWhack ( self );
        }
    }
    return 0;
}
Пример #7
0
rc_t BAMReaderRelease ( const BAMReader *cself )
{
    BAMReader *self = (BAMReader *)cself;
    
    if (cself != NULL) 
    {
        if (atomic32_dec_and_test(&self->refcount)) 
        {
            BAMReaderWhack(self);
            free(self);
        }
    }
    return 0;
}
Пример #8
0
LIB_EXPORT rc_t CC AlignAccessMgrRelease(const AlignAccessMgr *cself) {
    rc_t rc = 0;
    AlignAccessMgr *self = (AlignAccessMgr *)cself;
    
    if (cself != NULL) {
        if (atomic32_dec_and_test(&self->refcount)) {
            rc = AlignAccessMgrWhack(self);
            if (rc)
                atomic32_set(&self->refcount, 1);
            else
                free(self);
        }
    }
    return rc;
}
Пример #9
0
static
rc_t KFFClassRelease (const KFFClass * cself)
{
    rc_t rc = 0;

    FUNC_ENTRY();

    if (cself != NULL)
    {
	KFFClass *self = (KFFClass*)cself;
        if (atomic32_dec_and_test (&self->refcount))
	    return  KFFClassDestroy (cself);
    }
    return rc;
}
Пример #10
0
/* Release
 *  discard reference to file
 *  ignores NULL references
 */
LIB_EXPORT rc_t CC KArrayFileRelease ( const KArrayFile *cself )
{
    KArrayFile *self = ( KArrayFile* ) cself;
    if ( cself != NULL )
    {
        if ( atomic32_dec_and_test ( & self -> refcount ) )
        {
            rc_t rc = KArrayFileDestroy ( self );
            if ( rc != 0 )
                atomic32_set ( & self -> refcount, 1 );
            return rc;
        }
    }
    return 0;
}
Пример #11
0
rc_t ProcessOneRelease (const ProcessOne * cself)
{
    ProcessOne * self = (ProcessOne *)cself;
    rc_t rc = 0;

    if (self != NULL)
    {
	PLOGMSG (klogDebug10, "ProcessOneRelease $(f)", PLOG_S(f), self->path);
	if (atomic32_dec_and_test (&self->refcount))
	{
	    KDirectoryRelease (self->dir);
	    KDirectoryRelease (self->xml);
	    KMD5SumFmtRelease (self->md5);
	    CCFileFormatRelease (self->ff);
	    KFileRelease (self->file);
	    free (self);
	}
    }
    return rc;
}
Пример #12
0
rc_t CCCopyRelease (const CCCopy * cself)
{
    CCCopy * self = (CCCopy *)cself;
    rc_t rc = 0;
    LOGMSG (klogDebug9, "Enter: CCCopyRelease");

    if (self != NULL)
    {
	if (atomic32_dec_and_test (&self->refcount))
	{
	    KDirectoryRelease (self->in);
	    KDirectoryRelease (self->out);
	    KDirectoryRelease (self->xml);
	    KMD5SumFmtRelease (self->md5);
	    CCFileFormatRelease (self->ff);
	    free (self);
	}
    }
    return rc;
}
Пример #13
0
rc_t CopierRelease (const Copier * cself)
{
    rc_t rc = 0;
    Copier * self = (Copier*)cself;

    if (self != NULL)
    {
	if (atomic32_dec_and_test (&self->refcount))
	{
	    rc = KFileRelease (self->f);
	    if (rc == 0)
	    {
		rc = BufferQRelease (self->q);
		if (rc == 0)
		{
		    free (self);
		}
	    }
	}
    }
    return rc;
}
Пример #14
0
rc_t BlobHeadersRelease ( const BlobHeaders *self ) {
    if (self && atomic32_dec_and_test(&(((BlobHeaders *)self)->refcount)))
        return BlobHeadersDestroy((BlobHeaders *)self);
    return 0;
}
Пример #15
0
static rc_t VBlobHeaderDataRelease( const struct VBlobHeaderData *self ) {
    if (self && atomic32_dec_and_test(&(((struct VBlobHeaderData *)self)->refcount)))
        return VBlobHeaderDataDestroy((struct VBlobHeaderData *)self);
    return 0;
}
Пример #16
0
/* DropRef
 *  manipulates reference counter
 *  returns true if last ref
 */
int KConditionDropRef ( const KCondition *cself )
{
    assert ( cself != NULL );
    return atomic32_dec_and_test ( & ( ( KCondition* ) cself ) -> refcount );
}