static void * go2( void * arg) { lladdIterator_t * it = (lladdIterator_t *) arg; pthread_mutex_lock(&mutex); pthread_mutex_unlock(&mutex); int itRet = 0; while((itRet = Titerator_next(-1, it))) { lladdFifo_t ** dirtyFifo_ptr; lladdFifo_t *** bdirtyFifo_ptr = &dirtyFifo_ptr; lladdFifo_t * dirtyFifo; int dirtyFifoSize = Titerator_value(-1, it, (byte**)bdirtyFifo_ptr); dirtyFifo = * dirtyFifo_ptr; assert(dirtyFifo->iterator->type >= 0 && dirtyFifo->iterator->type < MAX_ITERATOR_TYPES); Titerator_tupleDone(-1, it); assert(dirtyFifoSize == sizeof(lladdFifo_t *)); assert(dirtyFifo->iterator->type >= 0 && dirtyFifo->iterator->type < MAX_ITERATOR_TYPES); trygo(dirtyFifo->iterator); } return NULL; }
static void * trygo( void * arg) { lladdIterator_t * it = (lladdIterator_t *) arg; pthread_mutex_lock(&mutex); pthread_mutex_unlock(&mutex); int itRet = 0; assert(it->type >= 0 && it->type < MAX_ITERATOR_TYPES); while((itRet = Titerator_tryNext(-1, it))) { assert(it->type >= 0 && it->type < MAX_ITERATOR_TYPES); byte * key, * value; int keySize, valueSize; keySize = Titerator_key (-1, it, &key); valueSize = Titerator_value(-1, it, &value); assert(keySize == sizeof(lsn_t)); LogEntry * e = (LogEntry*)value; linearHash_remove_arg * arg = (linearHash_remove_arg*)stasis_log_entry_update_args_ptr(e); assert(arg->keySize == sizeof(lsn_t)); assert(arg->valueSize == sizeof(char)); lsn_t i = *(lsn_t*)(arg+1); array[i]++; assert(*(lsn_t*)key == i); assert(array[i] == 1); Titerator_tupleDone(-1, it); } return NULL; }
JNIEXPORT void JNICALL Java_stasis_jni_Stasis_iterator_1tuple_1done (JNIEnv *e, jclass c, jlong xid, jbyteArray jbait) { size_t sz; lladdIterator_t** it = (lladdIterator_t**)bytes_jbyteArray(e,jbait,&sz); Titerator_tupleDone(xid, *it); }