?? NEWTITLE := '  NOS/VE Set Management ' ??
MODULE stm$set_end_job;
?? RIGHT := 110 ??

{  PURPOSE:
{    This module contains the compilation unit for stp$set_end_job.

?? NEWTITLE := 'Global Declarations Referenced by This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc ste$error_condition_codes
*copyc ost$status
?? POP ??
*copyc osp$set_status_abnormal
*copyc stp$clear_exclusive_access
*copyc stp$deallocate_ast_entry
*copyc stp$decrement_job_use_in_ast
*copyc stp$search_ast_by_set
*copyc stp$set_exclusive_access
*copyc osv$job_pageable_heap
*copyc stv$p_jast
?? OLDTITLE ??
?? NEWTITLE := '  [XDCL, #GATE] stp$set_end_job', EJECT ??
*copyc sth$set_end_job

  PROCEDURE [XDCL, #GATE] stp$set_end_job
    (VAR status: ost$status);

    VAR
      ast_entry: stt$active_set_entry,
      ast_index: stt$ast_index,
      job_ast_entry: stt$job_active_set_entry,
      job_ast_index: integer,
      local_status: ost$status,
      set_found: boolean,
      set_name: stt$set_name;

    local_status.normal := TRUE;
{   Decrement the count in the active set table, for each set in use by this
{   job.
    IF stv$p_jast <> NIL THEN
      FOR job_ast_index := LOWERBOUND (stv$p_jast^.table) TO UPPERBOUND (stv$p_jast^.table) DO
        IF stv$p_jast^.table [job_ast_index].entry_type = stc$valid THEN
          set_name := stv$p_jast^.table [job_ast_index].set_name;
          stp$set_exclusive_access;
          stp$search_ast_by_set (set_name, ast_entry, ast_index, set_found);
          IF set_found THEN
            stp$decrement_job_use_in_ast (ast_index);
            IF ast_entry.number_of_jobs_using_set = 1 THEN
              stp$deallocate_ast_entry (ast_index, local_status);
              local_status.normal := TRUE;
            IFEND;
          ELSE
            osp$set_status_abnormal (stc$set_management_id, ste$jast_ast_mismatch, set_name, local_status);
          IFEND;
          stp$clear_exclusive_access;
        IFEND;
      FOREND;

{  FREE THE JOB TABLES
      FREE stv$p_jast IN osv$job_pageable_heap^;
    IFEND;
    status := local_status;

  PROCEND stp$set_end_job;
?? OLDTITLE ??
MODEND stm$set_end_job;
