jobs.c
author viric@llimona
Fri, 13 Apr 2007 20:52:28 +0200
changeset 127 c620eacd7630
parent 120 790bc4cecd3b
child 134 5a6b8bb1f7a8
permissions -rw-r--r--
Fixed the versions in the code.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
49
09bb8a5583e9 Added the license.
lbatlle@npdl268.bpo.hp.com
parents: 44
diff changeset
     1
/*
09bb8a5583e9 Added the license.
lbatlle@npdl268.bpo.hp.com
parents: 44
diff changeset
     2
    Task Spooler - a task queue system for the unix user
09bb8a5583e9 Added the license.
lbatlle@npdl268.bpo.hp.com
parents: 44
diff changeset
     3
    Copyright (C) 2007  LluĂ­s Batlle i Rossell
09bb8a5583e9 Added the license.
lbatlle@npdl268.bpo.hp.com
parents: 44
diff changeset
     4
09bb8a5583e9 Added the license.
lbatlle@npdl268.bpo.hp.com
parents: 44
diff changeset
     5
    Please find the license in the provided COPYING file.
09bb8a5583e9 Added the license.
lbatlle@npdl268.bpo.hp.com
parents: 44
diff changeset
     6
*/
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
     7
#include <stdlib.h>
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
     8
#include <unistd.h>
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
     9
#include <stdio.h>
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
    10
#include <string.h>
32
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
    11
#include "main.h"
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
    12
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
    13
static enum
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
    14
{
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
    15
    FREE, /* No task is running */
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
    16
    WAITING /* A task is running, and the server is waiting */
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
    17
} state = FREE;
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
    18
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
    19
struct Notify
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
    20
{
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
    21
    int socket;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
    22
    int jobid;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
    23
    struct Notify *next;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
    24
};
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
    25
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
    26
/* Globals */
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
    27
static struct Job *firstjob = 0;
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
    28
static struct Job *first_finished_job = 0;
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
    29
static int jobids = 0;
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
    30
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
    31
static struct Notify *first_notify = 0;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
    32
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 3
diff changeset
    33
static void send_list_line(int s, const char * str)
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 3
diff changeset
    34
{
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 3
diff changeset
    35
    struct msg m;
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 3
diff changeset
    36
21
a797f96a022f Lines for list doesn't have limit.
viric@llimona
parents: 20
diff changeset
    37
    /* Message */
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 3
diff changeset
    38
    m.type = LIST_LINE;
21
a797f96a022f Lines for list doesn't have limit.
viric@llimona
parents: 20
diff changeset
    39
    m.u.line_size = strlen(str) + 1;
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 3
diff changeset
    40
21
a797f96a022f Lines for list doesn't have limit.
viric@llimona
parents: 20
diff changeset
    41
    send_msg(s, &m);
a797f96a022f Lines for list doesn't have limit.
viric@llimona
parents: 20
diff changeset
    42
a797f96a022f Lines for list doesn't have limit.
viric@llimona
parents: 20
diff changeset
    43
    /* Send the line */
a797f96a022f Lines for list doesn't have limit.
viric@llimona
parents: 20
diff changeset
    44
    send_bytes(s, str, m.u.line_size);
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 3
diff changeset
    45
}
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 3
diff changeset
    46
53
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    47
static void send_urgent_ok(int s)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    48
{
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    49
    struct msg m;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    50
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    51
    /* Message */
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    52
    m.type = URGENT_OK;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    53
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    54
    send_msg(s, &m);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    55
}
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    56
66
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
    57
static void send_swap_jobs_ok(int s)
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
    58
{
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
    59
    struct msg m;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
    60
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
    61
    /* Message */
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
    62
    m.type = SWAP_JOBS_OK;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
    63
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
    64
    send_msg(s, &m);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
    65
}
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
    66
120
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
    67
static struct Job * find_previous_job(const struct Job *final)
53
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    68
{
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    69
    struct Job *p;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    70
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    71
    /* Show Queued or Running jobs */
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    72
    p = firstjob;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    73
    while(p != 0)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    74
    {
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    75
        if (p->next == final)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    76
            return p;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    77
        p = p->next;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    78
    }
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    79
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    80
    return 0;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    81
}
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    82
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    83
static struct Job * findjob(int jobid)
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    84
{
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    85
    struct Job *p;
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    86
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    87
    /* Show Queued or Running jobs */
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    88
    p = firstjob;
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    89
    while(p != 0)
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    90
    {
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    91
        if (p->jobid == jobid)
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    92
            return p;
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    93
        p = p->next;
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    94
    }
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    95
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    96
    return 0;
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    97
}
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    98
32
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
    99
static struct Job * find_finished_job(int jobid)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   100
{
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   101
    struct Job *p;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   102
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   103
    /* Show Queued or Running jobs */
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   104
    p = first_finished_job;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   105
    while(p != 0)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   106
    {
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   107
        if (p->jobid == jobid)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   108
            return p;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   109
        p = p->next;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   110
    }
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   111
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   112
    return 0;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   113
}
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   114
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   115
void s_mark_job_running()
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   116
{
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   117
    firstjob->state = RUNNING;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   118
}
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   119
63
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   120
const char * jstate2string(enum Jobstate s)
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   121
{
120
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   122
    const char * jobstate;
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   123
    switch(s)
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   124
    {
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   125
        case QUEUED:
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   126
            jobstate = "queued";
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   127
            break;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   128
        case RUNNING:
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   129
            jobstate = "running";
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   130
            break;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   131
        case FINISHED:
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   132
            jobstate = "finished";
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   133
            break;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   134
    }
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   135
    return jobstate;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   136
}
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   137
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   138
void s_list(int s)
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   139
{
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   140
    struct Job *p;
117
db479ef293d3 Making "-l" not to trunc the commands.
viric@llimona
parents: 114
diff changeset
   141
    char *buffer;
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   142
114
bd123730295d times() reporting finished.
viric@mandarina
parents: 113
diff changeset
   143
    /* Times:   0.00/0.00/0.00 - 4+4+4+2 = 14*/ 
117
db479ef293d3 Making "-l" not to trunc the commands.
viric@llimona
parents: 114
diff changeset
   144
    buffer = joblist_headers();
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 3
diff changeset
   145
    send_list_line(s,buffer);
117
db479ef293d3 Making "-l" not to trunc the commands.
viric@llimona
parents: 114
diff changeset
   146
    free(buffer);
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   147
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   148
    /* Show Queued or Running jobs */
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   149
    p = firstjob;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   150
    while(p != 0)
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   151
    {
117
db479ef293d3 Making "-l" not to trunc the commands.
viric@llimona
parents: 114
diff changeset
   152
        buffer = joblist_line(p);
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 3
diff changeset
   153
        send_list_line(s,buffer);
117
db479ef293d3 Making "-l" not to trunc the commands.
viric@llimona
parents: 114
diff changeset
   154
        free(buffer);
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   155
        p = p->next;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   156
    }
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   157
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   158
    p = first_finished_job;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   159
120
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   160
    /* Show Finished jobs */
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   161
    while(p != 0)
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   162
    {
120
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   163
        buffer = joblist_line(p);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   164
        send_list_line(s,buffer);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   165
        free(buffer);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   166
        p = p->next;
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   167
    }
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   168
}
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   169
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   170
static struct Job * newjobptr()
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   171
{
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   172
    struct Job *p;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   173
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   174
    if (firstjob == 0)
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   175
    {
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   176
        firstjob = (struct Job *) malloc(sizeof(*firstjob));
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   177
        firstjob->next = 0;
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   178
        firstjob->output_filename = 0;
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   179
        firstjob->command = 0;
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   180
        return firstjob;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   181
    }
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   182
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   183
    p = firstjob;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   184
    while(p->next != 0)
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   185
        p = p->next;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   186
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   187
    p->next = (struct Job *) malloc(sizeof(*p));
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   188
    p->next->next = 0;
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   189
    p->next->output_filename = 0;
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   190
    p->next->command = 0;
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   191
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   192
    return p->next;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   193
}
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   194
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   195
/* Returns job id */
18
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 9
diff changeset
   196
int s_newjob(int s, struct msg *m)
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   197
{
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   198
    struct Job *p;
18
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 9
diff changeset
   199
    int res;
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   200
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   201
    p = newjobptr();
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   202
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   203
    p->jobid = jobids++;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   204
    p->state = QUEUED;
27
886bdb2f4632 Fixed the Output File information in the list.
viric@llimona
parents: 26
diff changeset
   205
    p->store_output = m->u.newjob.store_output;
55
678ca291d545 Now the '-nf' doesn't leave a job in 'finished' state.
viric@llimona
parents: 54
diff changeset
   206
    p->should_keep_finished = m->u.newjob.should_keep_finished;
18
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 9
diff changeset
   207
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 9
diff changeset
   208
    /* load the command */
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 9
diff changeset
   209
    p->command = malloc(m->u.newjob.command_size);
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 9
diff changeset
   210
    /* !!! Check retval */
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 9
diff changeset
   211
    res = recv_bytes(s, p->command, m->u.newjob.command_size);
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   212
    if (res == -1)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   213
        error("wrong bytes received");
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   214
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   215
    return p->jobid;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   216
}
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   217
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   218
/* This assumes the jobid exists */
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   219
void s_removejob(int jobid)
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   220
{
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   221
    struct Job *p;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   222
    struct Job *newnext;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   223
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   224
    if (firstjob->jobid == jobid)
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   225
    {
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   226
        struct Job *newfirst;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   227
        /* First job is to be removed */
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   228
        newfirst = firstjob->next;
18
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 9
diff changeset
   229
        free(firstjob->command);
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   230
        free(firstjob->output_filename);
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   231
        free(firstjob);
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   232
        firstjob = newfirst;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   233
        return;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   234
    }
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   235
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   236
    p = firstjob;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   237
    /* Not first job */
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   238
    while (p->next != 0)
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   239
    {
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   240
        if (p->next->jobid == jobid)
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   241
            break;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   242
        p = p->next;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   243
    }
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   244
    if (p->next == 0)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   245
        error("Job to be removed not found");
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   246
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   247
    newnext = p->next->next;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   248
18
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 9
diff changeset
   249
    free(p->next->command);
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   250
    free(p->next);
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   251
    p->next = newnext;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   252
}
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   253
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   254
/* -1 if no one should be run. */
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   255
int next_run_job()
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   256
{
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   257
    if (state == WAITING)
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   258
        return -1;
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   259
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   260
    if (firstjob != 0)
9
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   261
    {
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   262
        state = WAITING;
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   263
        return firstjob->jobid;
9
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   264
    }
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   265
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   266
    return -1;
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   267
}
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   268
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   269
/* Returns 1000 if no limit, The limit otherwise. */
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   270
static int get_max_finished_jobs()
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   271
{
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   272
    char *limit;
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   273
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   274
    limit = getenv("TS_MAXFINISHED");
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   275
    if (limit == NULL)
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   276
        return 1000;
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   277
    return abs(atoi(limit));
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   278
}
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   279
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   280
/* Add the job to the finished queue. */
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   281
static void new_finished_job(struct Job *j)
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   282
{
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   283
    struct Job *p;
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   284
    int count, max;
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   285
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   286
    max = get_max_finished_jobs();
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   287
    count = 0;
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   288
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   289
    if (first_finished_job == 0 && count < max)
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   290
    {
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   291
        first_finished_job = j;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   292
        first_finished_job->next = 0;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   293
        return;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   294
    }
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   295
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   296
    ++count;
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   297
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   298
    p = first_finished_job;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   299
    while(p->next != 0)
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   300
    {
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   301
        p = p->next;
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   302
        ++count;
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   303
    }
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   304
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   305
    /* If too many jobs, wipe out the first */
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   306
    if (count >= max)
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   307
    {
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   308
        struct Job *tmp;
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   309
        tmp = first_finished_job;
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   310
        first_finished_job = first_finished_job->next;
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   311
        free(tmp->command);
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   312
        free(tmp->output_filename);
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   313
        free(tmp);
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   314
    }
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   315
    p->next = j;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   316
    p->next->next = 0;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   317
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   318
    return;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   319
}
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   320
114
bd123730295d times() reporting finished.
viric@mandarina
parents: 113
diff changeset
   321
void job_finished(const struct Result *result)
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   322
{
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   323
    struct Job *newfirst;
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   324
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   325
    if (state != WAITING)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   326
        error("Wrong state in the server. Not WAITING, but %i", state);
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   327
    if (firstjob == 0)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   328
        error("on job finished, firstjob values %x", firstjob);
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   329
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   330
    if (firstjob->state != RUNNING)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   331
        error("on job finished, the firstjob is not running but %i",
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   332
                firstjob->state);
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   333
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   334
    /* Mark state */
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   335
    firstjob->state = FINISHED;
114
bd123730295d times() reporting finished.
viric@mandarina
parents: 113
diff changeset
   336
    firstjob->result = *result;
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   337
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   338
    /* Add it to the finished queue */
26
19d1bfdaa885 Fixed a bug with the job list.
viric@llimona
parents: 22
diff changeset
   339
    newfirst = firstjob->next;
55
678ca291d545 Now the '-nf' doesn't leave a job in 'finished' state.
viric@llimona
parents: 54
diff changeset
   340
    if (firstjob->should_keep_finished)
678ca291d545 Now the '-nf' doesn't leave a job in 'finished' state.
viric@llimona
parents: 54
diff changeset
   341
        new_finished_job(firstjob);
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   342
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   343
    /* Remove it from the run queue */
26
19d1bfdaa885 Fixed a bug with the job list.
viric@llimona
parents: 22
diff changeset
   344
    firstjob = newfirst;
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   345
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   346
    state = FREE;
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   347
}
20
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   348
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   349
void s_clear_finished()
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   350
{
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   351
    struct Job *p;
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   352
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   353
    if (first_finished_job == 0)
20
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   354
        return;
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   355
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   356
    p = first_finished_job;
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   357
    first_finished_job = 0;
20
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   358
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   359
    while (p != 0)
20
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   360
    {
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   361
        struct Job *tmp;
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   362
        tmp = p->next;
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   363
        free(p->command);
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   364
        free(p->output_filename);
20
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   365
        free(p);
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   366
        p = tmp;
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   367
    }
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   368
}
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   369
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 32
diff changeset
   370
void s_process_runjob_ok(int jobid, char *oname, int pid)
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   371
{
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   372
    struct Job *p;
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   373
    p = findjob(jobid);
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   374
    if (p == 0)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   375
        error("Job %i already run not found on runjob_ok", jobid);
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   376
    if (p->state != RUNNING)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   377
        error("Job %i not running, but %i on runjob_ok", jobid,
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   378
                p->state);
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   379
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 32
diff changeset
   380
    p->pid = pid;
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   381
    p->output_filename = oname;
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   382
}
32
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   383
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   384
void s_send_output(int s, int jobid)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   385
{
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   386
    struct Job *p = 0;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   387
    struct msg m;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   388
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   389
    if (jobid == -1)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   390
    {
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   391
        /* This means that we want the tail of the running task, or that
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   392
         * of the last job run */
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   393
        if (state == WAITING)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   394
        {
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   395
            p = firstjob;
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   396
            if (p == 0)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   397
                error("Internal state WAITING, but job not run."
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   398
                        "firstjob = %x", firstjob);
32
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   399
        }
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   400
        else
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   401
        {
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   402
            p = first_finished_job;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   403
            if (p == 0)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   404
            {
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   405
                send_list_line(s, "No jobs.\n");
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   406
                return;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   407
            }
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   408
            while(p->next != 0)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   409
                p = p->next;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   410
        }
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   411
    } else
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   412
    {
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   413
        if (state == WAITING && firstjob->jobid == jobid)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   414
            p = firstjob;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   415
        else
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   416
            p = find_finished_job(jobid);
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   417
    }
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   418
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   419
    if (p == 0)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   420
    {
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   421
        char tmp[50];
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   422
        sprintf(tmp, "Job %i not finished or not running.\n", jobid);
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   423
        send_list_line(s, tmp);
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   424
        return;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   425
    }
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   426
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   427
    m.type = ANSWER_OUTPUT;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   428
    if (!p->store_output)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   429
    {
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   430
        send_list_line(s, "The job hasn't output stored.\n");
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   431
        return;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   432
    }
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   433
    m.u.output.store_output = p->store_output;
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 32
diff changeset
   434
    m.u.output.pid = p->pid;
32
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   435
    m.u.output.ofilename_size = strlen(p->output_filename) + 1;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   436
    send_msg(s, &m);
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   437
    send_bytes(s, p->output_filename, m.u.output.ofilename_size);
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   438
}
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   439
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   440
void s_remove_job(int s, int jobid)
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   441
{
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   442
    struct Job *p = 0;
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   443
    struct msg m;
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   444
    struct Job *before_p = 0;
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   445
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   446
    if (jobid == -1)
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   447
    {
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   448
        /* Find the last job added */
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   449
        p = firstjob;
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   450
        if (p != 0)
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   451
        {
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   452
            while (p->next != 0)
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   453
            {
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   454
                before_p = p;
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   455
                p = p->next;
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   456
            }
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   457
        }
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   458
    }
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   459
    else
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   460
    {
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   461
        p = firstjob;
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   462
        if (p != 0)
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   463
        {
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   464
            while (p->next != 0 && p->jobid != jobid)
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   465
            {
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   466
                before_p = p;
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   467
                p = p->next;
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   468
            }
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   469
        }
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   470
    }
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   471
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   472
    if (p == 0 || p->state != QUEUED || before_p == 0)
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   473
    {
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   474
        char tmp[50];
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   475
        if (jobid == -1)
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   476
            sprintf(tmp, "The last job cannot be removed.\n");
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   477
        else
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   478
            sprintf(tmp, "The job %i cannot be removed.\n", jobid);
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   479
        send_list_line(s, tmp);
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   480
        return;
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   481
    }
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   482
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   483
    before_p->next = p->next;
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   484
    free(p->command);
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   485
    free(p->output_filename);
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   486
    free(p);
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   487
    m.type = REMOVEJOB_OK;
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   488
    send_msg(s, &m);
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   489
}
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   490
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   491
static void add_to_notify_list(int s, int jobid)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   492
{
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   493
    struct Notify *n;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   494
    struct Notify *new;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   495
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   496
    new = (struct Notify *) malloc(sizeof(*n));
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   497
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   498
    new->socket = s;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   499
    new->jobid = jobid;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   500
    new->next = 0;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   501
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   502
    n = first_notify;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   503
    if (n == 0)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   504
    {
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   505
        first_notify = new;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   506
        return;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   507
    }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   508
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   509
    while(n->next != 0)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   510
        n = n->next;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   511
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   512
    n->next = new;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   513
}
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   514
51
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   515
static void send_waitjob_ok(int s, int errorlevel)
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   516
{
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   517
    struct msg m;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   518
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   519
    m.type = WAITJOB_OK;
112
303834d55e99 More code on times()
viric@mandarina
parents: 104
diff changeset
   520
    m.u.result.errorlevel = errorlevel;
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   521
    send_msg(s, &m);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   522
}
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   523
51
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   524
static struct Job *
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   525
get_job(int jobid)
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   526
{
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   527
    struct Job *j;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   528
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   529
    j = findjob(jobid);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   530
    if (j != NULL)
51
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   531
        return j;
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   532
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   533
    j = find_finished_job(jobid);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   534
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   535
    if (j != NULL)
51
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   536
        return j;
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   537
51
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   538
    return 0;
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   539
}
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   540
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   541
/* Don't complain, if the socket doesn't exist */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   542
void s_remove_notification(int s)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   543
{
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   544
    struct Notify *n;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   545
    struct Notify *previous;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   546
    n = first_notify;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   547
    while (n != 0 && n->socket != s)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   548
        n = n->next;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   549
    if (n == 0)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   550
        return;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   551
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   552
    /* Remove the notification */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   553
    previous = first_notify;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   554
    if (n == previous)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   555
    {
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   556
        free(first_notify);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   557
        first_notify = 0;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   558
        return;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   559
    }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   560
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   561
    /* if not the first... */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   562
    while(previous->next != n)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   563
        previous = previous->next;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   564
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   565
    previous->next = n->next;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   566
    free(n);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   567
}
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   568
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   569
/* This is called when a job finishes */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   570
void check_notify_list(int jobid)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   571
{
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   572
    struct Notify *n;
51
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   573
    struct Job *j;
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   574
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   575
    n = first_notify;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   576
    while (n != 0 && n->jobid != jobid)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   577
    {
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   578
        n = n->next;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   579
    }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   580
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   581
    if (n == 0)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   582
    {
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   583
        return;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   584
    }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   585
51
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   586
    j = get_job(jobid);
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   587
    /* If the job finishes, notify the waiter */
51
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   588
    if (j->state == FINISHED)
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   589
    {
112
303834d55e99 More code on times()
viric@mandarina
parents: 104
diff changeset
   590
        send_waitjob_ok(n->socket, j->result.errorlevel);
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   591
        s_remove_notification(n->socket);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   592
    }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   593
}
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   594
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   595
void s_wait_job(int s, int jobid)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   596
{
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   597
    struct Job *p = 0;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   598
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   599
    if (jobid == -1)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   600
    {
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   601
        /* Find the last job added */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   602
        p = firstjob;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   603
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   604
        if (p != 0)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   605
            while (p->next != 0)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   606
                p = p->next;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   607
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   608
        /* Look in finished jobs if needed */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   609
        if (p == 0)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   610
        {
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   611
            p = first_finished_job;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   612
            if (p != 0)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   613
                while (p->next != 0)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   614
                    p = p->next;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   615
        }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   616
    }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   617
    else
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   618
    {
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   619
        p = firstjob;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   620
        while (p != 0 && p->jobid != jobid)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   621
            p = p->next;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   622
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   623
        /* Look in finished jobs if needed */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   624
        if (p == 0)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   625
        {
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   626
            p = first_finished_job;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   627
            while (p != 0 && p->jobid != jobid)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   628
                p = p->next;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   629
        }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   630
    }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   631
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   632
    if (p == 0)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   633
    {
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   634
        char tmp[50];
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   635
        if (jobid == -1)
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   636
            sprintf(tmp, "The last job cannot be waited.\n");
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   637
        else
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   638
            sprintf(tmp, "The job %i cannot be waited.\n", jobid);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   639
        send_list_line(s, tmp);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   640
        return;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   641
    }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   642
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   643
    if (p->state == FINISHED)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   644
    {
112
303834d55e99 More code on times()
viric@mandarina
parents: 104
diff changeset
   645
        send_waitjob_ok(s, p->result.errorlevel);
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   646
    }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   647
    else
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   648
        add_to_notify_list(s, p->jobid);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   649
}
53
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   650
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   651
void s_move_urgent(int s, int jobid)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   652
{
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   653
    struct Job *p = 0;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   654
    struct Job *tmp1;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   655
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   656
    if (jobid == -1)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   657
    {
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   658
        /* Find the last job added */
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   659
        p = firstjob;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   660
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   661
        if (p != 0)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   662
            while (p->next != 0)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   663
                p = p->next;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   664
    }
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   665
    else
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   666
    {
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   667
        p = firstjob;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   668
        while (p != 0 && p->jobid != jobid)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   669
            p = p->next;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   670
    }
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   671
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   672
    if (p == 0 || firstjob->next == 0)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   673
    {
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   674
        char tmp[50];
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   675
        if (jobid == -1)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   676
            sprintf(tmp, "The last job cannot be urged.\n");
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   677
        else
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   678
            sprintf(tmp, "The job %i cannot be urged.\n", jobid);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   679
        send_list_line(s, tmp);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   680
        return;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   681
    }
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   682
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   683
    /* Interchange the pointers */
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   684
    tmp1 = find_previous_job(p);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   685
    tmp1->next = p->next;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   686
    p->next = firstjob->next;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   687
    firstjob->next = p;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   688
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   689
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   690
    send_urgent_ok(s);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   691
}
63
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   692
66
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   693
void s_swap_jobs(int s, int jobid1, int jobid2)
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   694
{
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   695
    struct Job *p1, *p2;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   696
    struct Job *prev1, *prev2;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   697
    struct Job *tmp;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   698
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   699
    p1 = findjob(jobid1);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   700
    p2 = findjob(jobid2);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   701
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   702
    if (p1 == 0 || p2 == 0 || p1 == firstjob || p2 == firstjob)
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   703
    {
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   704
        char prev[60];
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   705
        sprintf(prev, "The jobs %i and %i cannot be swapped.\n", jobid1, jobid2);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   706
        send_list_line(s, prev);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   707
        return;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   708
    }
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   709
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   710
    /* Interchange the pointers */
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   711
    prev1 = find_previous_job(p1);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   712
    prev2 = find_previous_job(p2);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   713
    prev1->next = p2;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   714
    prev2->next = p1;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   715
    tmp = p1->next;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   716
    p1->next = p2->next;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   717
    p2->next = tmp;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   718
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   719
    send_swap_jobs_ok(s);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   720
}
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   721
63
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   722
static void send_state(int s, enum Jobstate state)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   723
{
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   724
    struct msg m;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   725
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   726
    m.type = ANSWER_STATE;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   727
    m.u.state = state;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   728
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   729
    send_msg(s, &m);
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   730
}
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   731
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   732
void s_send_state(int s, int jobid)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   733
{
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   734
    struct Job *p = 0;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   735
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   736
    if (jobid == -1)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   737
    {
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   738
        /* Find the last job added */
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   739
        p = firstjob;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   740
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   741
        if (p != 0)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   742
            while (p->next != 0)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   743
                p = p->next;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   744
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   745
        /* Look in finished jobs if needed */
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   746
        if (p == 0)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   747
        {
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   748
            p = first_finished_job;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   749
            if (p != 0)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   750
                while (p->next != 0)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   751
                    p = p->next;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   752
        }
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   753
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   754
    }
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   755
    else
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   756
    {
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   757
        p = get_job(jobid);
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   758
    }
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   759
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   760
    if (p == 0)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   761
    {
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   762
        char tmp[50];
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   763
        if (jobid == -1)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   764
            sprintf(tmp, "The last job cannot be stated.\n");
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   765
        else
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   766
            sprintf(tmp, "The job %i cannot be stated.\n", jobid);
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   767
        send_list_line(s, tmp);
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   768
        return;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   769
    }
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   770
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   771
    /* Interchange the pointers */
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   772
    send_state(s, p->state);
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   773
}
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   774
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   775
static void dump_job_struct(FILE *out, const struct Job *p)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   776
{
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   777
    fprintf(out, "  new_job\n");
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   778
    fprintf(out, "    jobid %i\n", p->jobid);
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   779
    fprintf(out, "    command \"%s\"\n", p->command);
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   780
    fprintf(out, "    state %s\n",
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   781
            jstate2string(p->state));
112
303834d55e99 More code on times()
viric@mandarina
parents: 104
diff changeset
   782
    fprintf(out, "    result.errorlevel %i\n", p->result.errorlevel);
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   783
    fprintf(out, "    output_filename \"%s\"\n",
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   784
            p->output_filename ? p->output_filename : "NULL");
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   785
    fprintf(out, "    store_output %i\n", p->store_output);
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   786
    fprintf(out, "    pid %i\n", p->pid);
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   787
    fprintf(out, "    should_keep_finished %i\n", p->pid);
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   788
}
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   789
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   790
void dump_jobs_struct(FILE *out)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   791
{
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   792
    const struct Job *p;
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   793
104
dc4dd9939238 Fixed error reporting.
viric@llimona
parents: 92
diff changeset
   794
    fprintf(out, "New_jobs\n");
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   795
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   796
    p = firstjob;
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   797
    while (p != 0)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   798
    {
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   799
        dump_job_struct(out, p);
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   800
        p = p->next;
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   801
    }
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   802
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   803
    p = first_finished_job;
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   804
    while (p != 0)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   805
    {
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   806
        dump_job_struct(out, p);
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   807
        p = p->next;
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   808
    }
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   809
}
120
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   810
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   811
void joblist_dump(int fd)
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   812
{
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   813
    struct Job *p;
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   814
    char *buffer;
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   815
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   816
    buffer = joblistdump_headers();
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   817
    write(fd,buffer, strlen(buffer));
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   818
    free(buffer);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   819
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   820
    /* We reuse the headers from the list */
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   821
    buffer = joblist_headers();
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   822
    write(fd, "# ", 2);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   823
    write(fd, buffer, strlen(buffer));
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   824
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   825
    /* Show Finished jobs */
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   826
    p = first_finished_job;
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   827
    while(p != 0)
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   828
    {
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   829
        buffer = joblist_line(p);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   830
        write(fd, "# ", 2);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   831
        write(fd,buffer, strlen(buffer));
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   832
        free(buffer);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   833
        p = p->next;
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   834
    }
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   835
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   836
    write(fd, "\n", 1);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   837
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   838
    /* Show Queued or Running jobs */
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   839
    p = firstjob;
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   840
    while(p != 0)
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   841
    {
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   842
        buffer = joblistdump_torun(p);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   843
        write(fd,buffer,strlen(buffer));
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   844
        free(buffer);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   845
        p = p->next;
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   846
    }
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   847
}