fsd_template_t * fsd_template_new( fsd_template_by_name_method *by_name_method, fsd_template_by_code_method *by_code_method, unsigned n_attributes ) { fsd_template_t *volatile self = NULL; TRY { fsd_malloc( self, fsd_template_t ); self->attributes = NULL; self->n_attributes = 0; self->get_attr = fsd_template_get_attr; self->set_attr = fsd_template_set_attr; self->get_v_attr = fsd_template_get_v_attr; self->set_v_attr = fsd_template_set_v_attr; self->by_name = by_name_method; self->by_code = by_code_method; self->destroy = fsd_template_destroy; fsd_calloc( self->attributes, n_attributes, void* ); self->n_attributes = n_attributes; } EXCEPT_DEFAULT { if( self ) self->destroy( self ); fsd_exc_reraise(); } END_TRY return self; }
fsd_job_t * fsd_job_new( char *job_id ) { fsd_job_t *volatile self = NULL; fsd_log_enter(( "(%s)", job_id )); TRY { fsd_malloc( self, fsd_job_t ); self->release = fsd_job_release; self->destroy = fsd_job_destroy; self->control = fsd_job_control; self->update_status = fsd_job_update_status; self->get_termination_status = fsd_job_get_termination_status; self->on_missing = fsd_job_on_missing; self->next = NULL; self->ref_cnt = 1; self->job_id = job_id; self->session = NULL; self->last_update_time = 0; self->flags = 0; self->state = DRMAA_PS_UNDETERMINED; self->exit_status = 0; self->submit_time = 0; self->start_time = 0; self->end_time = 0; self->cpu_usage = 0; self->mem_usage = 0; self->vmem_usage = 0; self->walltime = 0; self->n_execution_hosts = 0; self->execution_hosts = NULL; self->retry_cnt = 0; fsd_mutex_init( &self->mutex ); fsd_cond_init( &self->status_cond ); fsd_cond_init( &self->destroy_cond ); fsd_mutex_lock( &self->mutex ); } EXCEPT_DEFAULT { if( self ) self->destroy( self ); else fsd_free( job_id ); fsd_exc_reraise(); } END_TRY fsd_log_return(( "=%p: ref_cnt=%d [lock %s]", (void*)self, self->ref_cnt, self->job_id )); return self; }
static fsd_iter_t * fsd_iter_new_impl( char **list, int length, bool own ) { fsd_iter_t *volatile self = NULL; TRY { fsd_malloc( self, fsd_iter_t ); self->next = fsd_iter_next; self->reset = fsd_iter_reset; self->len = fsd_iter_len; self->append = fsd_iter_append; self->destroy = fsd_iter_destroy; self->_list = list; self->_position = 0; if( list == NULL ) self->_length = 0; else if( length >= 0 ) self->_length = length; else { char **i; int cnt = 0; for( i = self->_list; *i != NULL; i++ ) cnt++; self->_length = cnt; } self->_own_list = own; } EXCEPT_DEFAULT { if( own && list ) { if( length >= 0 ) { int i; for( i = 0; i < length; i++ ) fsd_free( list[i] ); fsd_free( list ); } else fsd_free_vector( list ); } fsd_exc_reraise(); } END_TRY return self; }
fsd_job_set_t * fsd_job_set_new(void) { fsd_job_set_t *volatile self = NULL; const size_t initial_size = 1024; fsd_log_enter(( "()" )); TRY { fsd_malloc( self, fsd_job_set_t ); self->destroy = fsd_job_set_destroy; self->add = fsd_job_set_add; self->remove = fsd_job_set_remove; self->get = fsd_job_set_get; self->empty = fsd_job_set_empty; self->find_terminated = fsd_job_set_find_terminated; self->get_all_job_ids = fsd_job_set_get_all_job_ids; self->signal_all = fsd_job_set_signal_all; self->tab = NULL; self->n_jobs = 0; fsd_calloc( self->tab, initial_size, fsd_job_t* ); self->tab_size = initial_size; self->tab_mask = self->tab_size - 1; fsd_mutex_init( &self->mutex ); } EXCEPT_DEFAULT { if( self ) { fsd_free( self->tab ); fsd_free( self ); } fsd_exc_reraise(); } END_TRY fsd_log_return(( " =%p", (void*)self )); return self; }
fsd_drmaa_session_t * fsd_drmaa_session_new( const char *contact ) { fsd_drmaa_session_t *volatile self = NULL; fsd_log_enter(( "(%s)", contact )); TRY { fsd_malloc( self, fsd_drmaa_session_t ); self->release = fsd_drmaa_session_release; self->destroy = fsd_drmaa_session_destroy; self->destroy_nowait = fsd_drmaa_session_destroy_nowait; self->run_job = fsd_drmaa_session_run_job; self->run_bulk = fsd_drmaa_session_run_bulk; self->control_job = fsd_drmaa_session_control_job; self->job_ps = fsd_drmaa_session_job_ps; self->synchronize = fsd_drmaa_session_synchronize; self->wait = fsd_drmaa_session_wait; self->new_job = fsd_drmaa_session_new_job; self->run_impl = fsd_drmaa_session_run_impl; self->wait_for_single_job = fsd_drmaa_session_wait_for_single_job; self->wait_for_any_job = fsd_drmaa_session_wait_for_any_job; self->wait_for_job_status_change = fsd_drmaa_session_wait_for_job_status_change; self->wait_thread = fsd_drmaa_session_wait_thread; self->stop_wait_thread = fsd_drmaa_session_stop_wait_thread; self->update_all_jobs_status = fsd_drmaa_session_update_all_jobs_status; self->get_submited_job_ids = fsd_drmaa_session_get_submited_job_ids; self->get_job = fsd_drmaa_session_get_job; self->load_configuration = fsd_drmaa_session_load_configuration; self->read_configuration = fsd_drmaa_session_read_configuration; self->apply_configuration = fsd_drmaa_session_apply_configuration; self->ref_cnt = 1; self->destroy_requested = false; self->contact = NULL; self->jobs = NULL; self->configuration = NULL; self->pool_delay.tv_sec = 5; self->pool_delay.tv_nsec = 0; self->cache_job_state = 0; self->enable_wait_thread = true; self->job_categories = NULL; self->missing_jobs = FSD_REVEAL_MISSING_JOBS; self->wait_thread_started = false; self->wait_thread_run_flag = false; fsd_mutex_init( &self->mutex ); fsd_cond_init( &self->wait_condition ); fsd_cond_init( &self->destroy_condition ); fsd_mutex_init( &self->drm_connection_mutex ); self->jobs = fsd_job_set_new(); self->contact = fsd_strdup( contact ); } EXCEPT_DEFAULT { if( self != NULL ) self->destroy( self ); fsd_exc_reraise(); } END_TRY fsd_log_debug(("sizeof(fsd_drmaa_session_t)=%d", sizeof(fsd_drmaa_session_t))); return self; }