Changeset 8486

Show
Ignore:
Timestamp:
08/31/10 15:05:32 (3 years ago)
Author:
bligon
Message:

Corrected memory leaks associated with using the PJMP state machine command.
Files affected:

src/common/misc/state-machine-fns.c
src/server/create-immutable-copies.sm
src/server/get-attr.sm
src/server/list-attr.sm
src/server/module.mk.in
src/server/precreate-pool-refiller.sm
src/server/pvfs2-server.c
src/server/pvfs2-server.h
src/server/set-eattr.sm
src/server/tree-communicate.sm

Location:
branches/Orange-Branch/src
Files:
8 modified

Legend:

Unmodified
Added
Removed
  • branches/Orange-Branch/src/common/misc/state-machine-fns.c

    r8317 r8486  
    6767         /* this will loop from TOS down to the base frame */ 
    6868         /* base frame will not be processed */ 
     69 
     70         gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"[SM Terminating Child]: my_frame:%p\n",my_frame); 
    6971         qlist_for_each_entry(f, &smcb->parent_smcb->frames, link) 
    7072         { 
     
    7678         } 
    7779 
     80        gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"[SM Terminating Child]: children_running:%d\n" 
     81                                               ,smcb->parent_smcb->children_running); 
    7882        if (--smcb->parent_smcb->children_running <= 0) 
    7983        { 
     
    8387            job_null(0, smcb->parent_smcb, 0, r, &id, smcb->context); 
    8488        } 
    85         return SM_ACTION_DEFERRED; 
    86     } 
     89    } 
     90 
    8791    /* call state machine completion function */ 
    8892    if (smcb->terminate_fn) 
    8993    { 
     94        if (smcb->parent_smcb) 
     95        { 
     96            gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"[SM Terminating Child]: calling terminate function.\n"); 
     97        }    
    9098        (*smcb->terminate_fn)(smcb, r); 
    9199    } 
     
    545553    struct PINT_frame_s *frame_entry, *tmp; 
    546554    assert(smcb); 
     555 
     556    gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"PINT_smcb_free: smcb:%p\n",smcb); 
     557 
    547558    qlist_for_each_entry_safe(frame_entry, tmp, &smcb->frames, link) 
    548559    { 
     560        if (frame_entry->frame) 
     561        { 
     562           gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"PINT_smcb_free: frame:%p \ttask-id:%d\n" 
     563                                                  ,frame_entry->frame 
     564                                                  ,frame_entry->task_id); 
     565        } 
     566        else 
     567        { 
     568           gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"PINT_smcb_free: NO FRAME ENTRIES.\n"); 
     569        } 
     570 
    549571        if (frame_entry->frame && frame_entry->task_id == 0) 
    550572        { 
    551573            /* only free if task_id is 0 */ 
    552574            free(frame_entry->frame); 
    553         } 
     575        }  
    554576        qlist_del(&frame_entry->link); 
    555577        free(frame_entry); 
     
    739761static int child_sm_frame_terminate(struct PINT_smcb * smcb, job_status_s * js_p) 
    740762{ 
     763    gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"CHILD TERMINATE: smcb:%p.\n",smcb); 
     764 
    741765    PINT_smcb_free(smcb); 
    742766    return 0; 
     
    803827        /* assign frame */ 
    804828        PINT_sm_push_frame(new_sm, f->task_id, f->frame); 
     829 
    805830        /* locate SM to run */ 
     831        gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"START CHILD FRAMES: calling smcb is %p.\n",smcb); 
     832        gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"START CHILD FRAMES: with frame: %p.\n",f->frame); 
     833        gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"START CHILD FRAMES: and task id: %d.\n",f->task_id); 
    806834        new_sm->current_state = PINT_sm_task_map(smcb, f->task_id); 
     835 
     836        gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"START CHILD FRAMES: new_sm->current_state is %s\n:" 
     837                                    ,(new_sm->current_state)?"VALID":"INVALID"); 
     838        if (new_sm->current_state) 
     839        { 
     840            gossip_debug(GOSSIP_STATE_MACHINE_DEBUG,"START CHILD FRAMES: new_sm->current_state->flag is %d\n" 
     841                                        ,new_sm->current_state->flag); 
     842        } 
     843 
    807844        /* invoke SM */ 
    808845        retval = PINT_state_machine_start(new_sm, &r); 
  • branches/Orange-Branch/src/server/create-immutable-copies.sm

    r8476 r8486  
    44 * See COPYING in top-level directory. 
    55 */ 
     6 
     7/* adding a comment */ 
    68 
    79#include <string.h> 
     
    135137        pjmp copy_data 
    136138        { 
    137            LOCAL_SRC  => pvfs2_mirror_work_sm; 
    138            REMOTE_SRC => pvfs2_call_msgpairarray_sm;  
     139           LOCAL_SRC  => pvfs2_pjmp_mirror_work_sm; 
     140           REMOTE_SRC => pvfs2_pjmp_call_msgpairarray_sm;  
    139141        } 
    140142        success => check_copy_results; 
     
    192194 
    193195} /*end nested state machine pvfs2_create_immutable_copies_sm*/ 
    194  
    195 %% 
    196  
    197 %% 
    198 nested machine pvfs2_call_msgpairarray_sm 
    199 { 
    200    state call_msgpairarray 
    201     { 
    202         run call_msgpairarray; 
    203         success => transfer_msgpair; 
    204         default => cleanup_msgpairarray; 
    205     } 
    206  
    207    state transfer_msgpair 
    208     { 
    209          jump pvfs2_msgpairarray_sm; 
    210          default => cleanup_msgpairarray; 
    211     } 
    212  
    213    state cleanup_msgpairarray 
    214     { 
    215         run cleanup_msgpairarray; 
    216         default => return; 
    217     } 
    218 } /*end nested state machine pvfs2_call_msgpairarray_sm*/ 
    219196%% 
    220197 
     
    19081885 
    19091886 
    1910  
    1911  
    1912 /****************************************************************************/ 
    1913 /* Actions for pvfs2_call_msgpairarray_sm                                   */ 
    1914 /****************************************************************************/ 
    1915  
    1916 /*We use a separate nested state machine to call msgpairarray because */ 
    1917 /*msgpairarray.sm is setup to work only with a "jump".  When "pjmp"   */ 
    1918 /*is used, the frame stack gets corrupted.                            */ 
    1919 static PINT_sm_action call_msgpairarray (struct PINT_smcb *smcb 
    1920                                         ,job_status_s *js_p) 
    1921 {    
    1922    gossip_debug(GOSSIP_MIRROR_DEBUG,"Executing pvfs2_call_msgpairarray_sm:" 
    1923                                     "call_msgpairarray....\n"); 
    1924    gossip_debug(GOSSIP_MIRROR_DEBUG,"\tframe count is %d.\n",smcb->frame_count); 
    1925    gossip_debug(GOSSIP_MIRROR_DEBUG,"\t base frame is %d.\n",smcb->base_frame); 
    1926    struct PINT_server_op *mirror_op = PINT_sm_frame(smcb,PINT_FRAME_CURRENT); 
    1927    PINT_sm_msgarray_op *m_op = &(mirror_op->msgarray_op); 
    1928  
    1929    gossip_debug(GOSSIP_MIRROR_DEBUG,"\tmirror_op:%p\n",mirror_op); 
    1930  
    1931    js_p->error_code = 0; 
    1932  
    1933    gossip_debug(GOSSIP_MIRROR_DEBUG,"\tm_op->msgpair.req.op:%d\n" 
    1934                                     ,m_op->msgpair.req.op ); 
    1935  
    1936    PINT_sm_push_frame(smcb,0,m_op); 
    1937     
    1938    gossip_debug(GOSSIP_MIRROR_DEBUG,"\tAFTER PUSH:smcb->base_frame:%d" 
    1939                                     "\tframe_count:%d\n" 
    1940                                    ,smcb->base_frame,smcb->frame_count); 
    1941  
    1942    return SM_ACTION_COMPLETE; 
    1943 }/*end action call_msgpairarray*/ 
    1944  
    1945  
    1946  
    1947  
    1948 static PINT_sm_action cleanup_msgpairarray (struct PINT_smcb *smcb 
    1949                                            ,job_status_s *js_p) 
    1950 {    
    1951    gossip_debug(GOSSIP_MIRROR_DEBUG,"Executing IMM_COPIES:cleanup_msgpairarray" 
    1952                                     "....\n"); 
    1953    struct PINT_server_op *mirror_op = PINT_sm_frame(smcb,PINT_FRAME_CURRENT); 
    1954    PINT_sm_msgarray_op *m_op = &(mirror_op->msgarray_op); 
    1955  
    1956    gossip_debug(GOSSIP_MIRROR_DEBUG,"\tmirror_op:%p\n",mirror_op); 
    1957  
    1958    gossip_debug(GOSSIP_MIRROR_DEBUG,"\tjs_p->error_code:%d\n" 
    1959                                    ,js_p->error_code); 
    1960    gossip_debug(GOSSIP_MIRROR_DEBUG,"\tBEFORE POP:smcb->frame_base:%d" 
    1961                                     "\tframe_count:%d\n" 
    1962                                    ,smcb->base_frame,smcb->frame_count); 
    1963  
    1964  
    1965    gossip_debug(GOSSIP_MIRROR_DEBUG,"\tm_op->msgpair.req.op:%d\n" 
    1966                                     ,m_op->msgpair.req.op ); 
    1967  
    1968    gossip_debug(GOSSIP_MIRROR_DEBUG,"\tmirror_op->resp.status:%d\n" 
    1969                                    ,mirror_op->resp.status); 
    1970  
    1971    return SM_ACTION_COMPLETE; 
    1972 }/*end action cleanup_msgpairarray*/ 
    1973  
    1974  
    1975  
    1976  
    19771887int mirror_comp_fn(void *v_p, struct PVFS_server_resp *resp_p, int i) 
    19781888{ 
  • branches/Orange-Branch/src/server/get-attr.sm

    r8251 r8486  
    245245 
    246246%% 
     247 
     248 
    247249 
    248250/* getattr_verify_attribs() 
  • branches/Orange-Branch/src/server/list-attr.sm

    r7471 r8486  
    4848        pjmp listattr_setup_getattr 
    4949        { 
    50             success => pvfs2_get_attr_work_sm; 
     50            success => pvfs2_pjmp_get_attr_work_sm; 
    5151        } 
    5252        success => interpret_getattrs; 
  • branches/Orange-Branch/src/server/module.mk.in

    r8317 r8486  
    77        # automatically generated c files 
    88        SERVER_SMCGEN := \ 
     9                $(DIR)/pjmp-machines.c \ 
    910                $(DIR)/setparam.c \ 
    1011                $(DIR)/lookup.c \ 
  • branches/Orange-Branch/src/server/pvfs2-server.h

    r8484 r8486  
    717717/* server side state machines */ 
    718718extern struct PINT_state_machine_s pvfs2_mirror_sm; 
    719  
     719extern struct PINT_state_machine_s pvfs2_pjmp_call_msgpairarray_sm; 
     720extern struct PINT_state_machine_s pvfs2_pjmp_get_attr_with_prelude_sm; 
     721extern struct PINT_state_machine_s pvfs2_pjmp_remove_work_sm; 
     722extern struct PINT_state_machine_s pvfs2_pjmp_mirror_work_sm; 
     723extern struct PINT_state_machine_s pvfs2_pjmp_create_immutable_copies_sm; 
     724extern struct PINT_state_machine_s pvfs2_pjmp_get_attr_work_sm; 
    720725 
    721726/* nested state machines */ 
     
    731736extern struct PINT_state_machine_s pvfs2_unexpected_sm; 
    732737extern struct PINT_state_machine_s pvfs2_create_immutable_copies_sm; 
    733 extern struct PINT_state_machine_s pvfs2_call_msgpairarray_sm; 
    734738extern struct PINT_state_machine_s pvfs2_mirror_work_sm; 
    735739extern struct PINT_state_machine_s pvfs2_tree_remove_work_sm; 
    736740extern struct PINT_state_machine_s pvfs2_tree_get_file_size_work_sm; 
     741extern struct PINT_state_machine_s pvfs2_call_msgpairarray_sm; 
    737742 
    738743/* Exported Prototypes */ 
  • branches/Orange-Branch/src/server/set-eattr.sm

    r7968 r8486  
    7777        pjmp setup_create_immutable_copies 
    7878        { 
    79            CREATE_IMM_COPIES => pvfs2_create_immutable_copies_sm; 
     79           CREATE_IMM_COPIES => pvfs2_pjmp_create_immutable_copies_sm; 
    8080        } 
    8181        success => inspect_imm_copies; 
  • branches/Orange-Branch/src/server/tree-communicate.sm

    r8317 r8486  
    7474        pjmp tree_remove_setup 
    7575        { 
    76             REMOTE_OPERATION => pvfs2_call_msgpairarray_sm; 
    77             LOCAL_OPERATION => pvfs2_remove_work_sm; 
     76            REMOTE_OPERATION => pvfs2_pjmp_call_msgpairarray_sm; 
     77            LOCAL_OPERATION => pvfs2_pjmp_remove_work_sm; 
    7878        } 
    7979        default => tree_remove_work_cleanup; 
     
    114114        pjmp tree_get_file_size_setup 
    115115        { 
    116             REMOTE_OPERATION => pvfs2_call_msgpairarray_sm; 
    117             LOCAL_OPERATION => pvfs2_get_attr_with_prelude_sm; 
     116            REMOTE_OPERATION => pvfs2_pjmp_call_msgpairarray_sm; 
     117            LOCAL_OPERATION => pvfs2_pjmp_get_attr_with_prelude_sm; 
    118118        } 
    119119        default => tree_get_file_size_work_cleanup;