jobs.c
author viric@mandarina
Mon, 05 May 2008 23:14:22 +0200
changeset 216 b4476e12a717
parent 209 507bd37ab1d3
child 218 f084c8de313f
permissions -rw-r--r--
Moving versions to 0.5.4.1 for debianers.
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>
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
    11
#include <sys/time.h>
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
    12
#include <time.h>
32
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
    13
#include "main.h"
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
    14
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
    15
static enum
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
    16
{
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
    17
    FREE, /* No task is running */
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
    18
    WAITING /* A task is running, and the server is waiting */
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
    19
} state = FREE;
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
    20
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
    21
struct Notify
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
    22
{
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
    23
    int socket;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
    24
    int jobid;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
    25
    struct Notify *next;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
    26
};
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
    27
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
    28
/* Globals */
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
    29
static struct Job *firstjob = 0;
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
    30
static struct Job *first_finished_job = 0;
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
    31
static int jobids = 0;
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
    32
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
    33
static struct Notify *first_notify = 0;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
    34
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 3
diff changeset
    35
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
    36
{
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 3
diff changeset
    37
    struct msg m;
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 3
diff changeset
    38
21
a797f96a022f Lines for list doesn't have limit.
viric@llimona
parents: 20
diff changeset
    39
    /* Message */
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 3
diff changeset
    40
    m.type = LIST_LINE;
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
    41
    m.u.size = strlen(str) + 1;
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 3
diff changeset
    42
21
a797f96a022f Lines for list doesn't have limit.
viric@llimona
parents: 20
diff changeset
    43
    send_msg(s, &m);
a797f96a022f Lines for list doesn't have limit.
viric@llimona
parents: 20
diff changeset
    44
a797f96a022f Lines for list doesn't have limit.
viric@llimona
parents: 20
diff changeset
    45
    /* Send the line */
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
    46
    send_bytes(s, str, m.u.size);
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 3
diff changeset
    47
}
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 3
diff changeset
    48
53
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    49
static void send_urgent_ok(int s)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    50
{
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    51
    struct msg m;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    52
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    53
    /* Message */
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    54
    m.type = URGENT_OK;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    55
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    56
    send_msg(s, &m);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    57
}
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    58
66
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
    59
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
    60
{
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
    61
    struct msg m;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
    62
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
    63
    /* Message */
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
    64
    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
    65
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
    66
    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
    67
}
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
    68
120
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
    69
static struct Job * find_previous_job(const struct Job *final)
53
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    70
{
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    71
    struct Job *p;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    72
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    73
    /* Show Queued or Running jobs */
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    74
    p = firstjob;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    75
    while(p != 0)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    76
    {
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    77
        if (p->next == final)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    78
            return p;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    79
        p = p->next;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    80
    }
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    81
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    82
    return 0;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    83
}
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
    84
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    85
static struct Job * findjob(int jobid)
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
    struct Job *p;
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    88
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    89
    /* Show Queued or Running jobs */
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    90
    p = firstjob;
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    91
    while(p != 0)
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    92
    {
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    93
        if (p->jobid == jobid)
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    94
            return p;
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    95
        p = p->next;
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    96
    }
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
    return 0;
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
    99
}
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   100
32
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   101
static struct Job * find_finished_job(int jobid)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   102
{
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   103
    struct Job *p;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   104
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   105
    /* Show Queued or Running jobs */
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   106
    p = first_finished_job;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   107
    while(p != 0)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   108
    {
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   109
        if (p->jobid == jobid)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   110
            return p;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   111
        p = p->next;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   112
    }
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   113
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   114
    return 0;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   115
}
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   116
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   117
void s_mark_job_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
    firstjob->state = RUNNING;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   120
}
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   121
63
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   122
const char * jstate2string(enum Jobstate s)
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   123
{
120
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   124
    const char * jobstate;
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   125
    switch(s)
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   126
    {
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   127
        case QUEUED:
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   128
            jobstate = "queued";
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   129
            break;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   130
        case RUNNING:
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   131
            jobstate = "running";
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   132
            break;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   133
        case FINISHED:
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   134
            jobstate = "finished";
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   135
            break;
156
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   136
        case SKIPPED:
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   137
            jobstate = "skipped";
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   138
            break;
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   139
    }
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   140
    return jobstate;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   141
}
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   142
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   143
void s_list(int s)
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   144
{
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   145
    struct Job *p;
117
db479ef293d3 Making "-l" not to trunc the commands.
viric@llimona
parents: 114
diff changeset
   146
    char *buffer;
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   147
114
bd123730295d times() reporting finished.
viric@mandarina
parents: 113
diff changeset
   148
    /* 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
   149
    buffer = joblist_headers();
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 3
diff changeset
   150
    send_list_line(s,buffer);
117
db479ef293d3 Making "-l" not to trunc the commands.
viric@llimona
parents: 114
diff changeset
   151
    free(buffer);
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   152
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   153
    /* Show Queued or Running jobs */
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   154
    p = firstjob;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   155
    while(p != 0)
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   156
    {
117
db479ef293d3 Making "-l" not to trunc the commands.
viric@llimona
parents: 114
diff changeset
   157
        buffer = joblist_line(p);
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 3
diff changeset
   158
        send_list_line(s,buffer);
117
db479ef293d3 Making "-l" not to trunc the commands.
viric@llimona
parents: 114
diff changeset
   159
        free(buffer);
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   160
        p = p->next;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   161
    }
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   162
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   163
    p = first_finished_job;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   164
120
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   165
    /* Show Finished jobs */
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   166
    while(p != 0)
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   167
    {
120
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   168
        buffer = joblist_line(p);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   169
        send_list_line(s,buffer);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   170
        free(buffer);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
   171
        p = p->next;
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   172
    }
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   173
}
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   174
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   175
static struct Job * newjobptr()
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   176
{
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   177
    struct Job *p;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   178
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   179
    if (firstjob == 0)
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   180
    {
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   181
        firstjob = (struct Job *) malloc(sizeof(*firstjob));
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   182
        firstjob->next = 0;
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   183
        firstjob->output_filename = 0;
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   184
        firstjob->command = 0;
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   185
        return firstjob;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   186
    }
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   187
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   188
    p = firstjob;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   189
    while(p->next != 0)
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   190
        p = p->next;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   191
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   192
    p->next = (struct Job *) malloc(sizeof(*p));
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   193
    p->next->next = 0;
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   194
    p->next->output_filename = 0;
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   195
    p->next->command = 0;
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   196
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   197
    return p->next;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   198
}
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   199
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   200
/* Returns job id */
18
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 9
diff changeset
   201
int s_newjob(int s, struct msg *m)
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   202
{
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   203
    struct Job *p;
18
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 9
diff changeset
   204
    int res;
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   205
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   206
    p = newjobptr();
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   207
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   208
    p->jobid = jobids++;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   209
    p->state = QUEUED;
27
886bdb2f4632 Fixed the Output File information in the list.
viric@llimona
parents: 26
diff changeset
   210
    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
   211
    p->should_keep_finished = m->u.newjob.should_keep_finished;
155
55515f9eac77 Added 'depend' -d
viric@vicerveza
parents: 154
diff changeset
   212
    p->depend = m->u.newjob.depend;
18
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 9
diff changeset
   213
147
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   214
    pinfo_init(&p->info);
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   215
    pinfo_set_enqueue_time(&p->info);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   216
18
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 9
diff changeset
   217
    /* load the command */
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 9
diff changeset
   218
    p->command = malloc(m->u.newjob.command_size);
147
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   219
    if (p->command == 0)
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   220
        error("Cannot allocate memory in s_newjob command_size (%i)",
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   221
                m->u.newjob.command_size);
18
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 9
diff changeset
   222
    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
   223
    if (res == -1)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   224
        error("wrong bytes received");
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   225
150
a615d7971bf6 Added -L (label)
viric@llimona
parents: 148
diff changeset
   226
    /* load the label */
a615d7971bf6 Added -L (label)
viric@llimona
parents: 148
diff changeset
   227
    p->label = 0;
a615d7971bf6 Added -L (label)
viric@llimona
parents: 148
diff changeset
   228
    if (m->u.newjob.label_size > 0)
a615d7971bf6 Added -L (label)
viric@llimona
parents: 148
diff changeset
   229
    {
a615d7971bf6 Added -L (label)
viric@llimona
parents: 148
diff changeset
   230
        char *ptr;
a615d7971bf6 Added -L (label)
viric@llimona
parents: 148
diff changeset
   231
        ptr = (char *) malloc(m->u.newjob.label_size);
a615d7971bf6 Added -L (label)
viric@llimona
parents: 148
diff changeset
   232
        if (ptr == 0)
a615d7971bf6 Added -L (label)
viric@llimona
parents: 148
diff changeset
   233
            error("Cannot allocate memory in s_newjob env_size(%i)",
a615d7971bf6 Added -L (label)
viric@llimona
parents: 148
diff changeset
   234
                    m->u.newjob.env_size);
a615d7971bf6 Added -L (label)
viric@llimona
parents: 148
diff changeset
   235
        res = recv_bytes(s, ptr, m->u.newjob.label_size);
a615d7971bf6 Added -L (label)
viric@llimona
parents: 148
diff changeset
   236
        if (res == -1)
a615d7971bf6 Added -L (label)
viric@llimona
parents: 148
diff changeset
   237
            error("wrong bytes received");
a615d7971bf6 Added -L (label)
viric@llimona
parents: 148
diff changeset
   238
        p->label = ptr;
a615d7971bf6 Added -L (label)
viric@llimona
parents: 148
diff changeset
   239
    }
a615d7971bf6 Added -L (label)
viric@llimona
parents: 148
diff changeset
   240
147
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   241
    /* load the info */
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   242
    if (m->u.newjob.env_size > 0)
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   243
    {
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   244
        char *ptr;
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   245
        ptr = (char *) malloc(m->u.newjob.env_size);
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   246
        if (ptr == 0)
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   247
            error("Cannot allocate memory in s_newjob env_size(%i)",
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   248
                    m->u.newjob.env_size);
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   249
        res = recv_bytes(s, ptr, m->u.newjob.env_size);
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   250
        if (res == -1)
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   251
            error("wrong bytes received");
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   252
        pinfo_addinfo(&p->info, m->u.newjob.env_size+100,
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   253
                "Environment:\n%s", ptr);
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   254
        free(ptr);
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   255
    }
e173645f5221 Added environment info through TS_ENV
viric@llimona
parents: 146
diff changeset
   256
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   257
    return p->jobid;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   258
}
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   259
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   260
/* This assumes the jobid exists */
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   261
void s_removejob(int jobid)
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   262
{
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   263
    struct Job *p;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   264
    struct Job *newnext;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   265
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   266
    if (firstjob->jobid == jobid)
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   267
    {
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   268
        struct Job *newfirst;
134
5a6b8bb1f7a8 Fixing two bugs noted in buglist.bug (ts clients not dying on removejob, queue
viric@llimona
parents: 120
diff changeset
   269
5a6b8bb1f7a8 Fixing two bugs noted in buglist.bug (ts clients not dying on removejob, queue
viric@llimona
parents: 120
diff changeset
   270
        if (state == WAITING)
5a6b8bb1f7a8 Fixing two bugs noted in buglist.bug (ts clients not dying on removejob, queue
viric@llimona
parents: 120
diff changeset
   271
            state = FREE;
5a6b8bb1f7a8 Fixing two bugs noted in buglist.bug (ts clients not dying on removejob, queue
viric@llimona
parents: 120
diff changeset
   272
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   273
        /* First job is to be removed */
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   274
        newfirst = firstjob->next;
18
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 9
diff changeset
   275
        free(firstjob->command);
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   276
        free(firstjob->output_filename);
148
a8c5dac8f1e9 Fixing a memory leak in new pinfo.
viric@llimona
parents: 147
diff changeset
   277
        pinfo_free(&firstjob->info);
150
a615d7971bf6 Added -L (label)
viric@llimona
parents: 148
diff changeset
   278
        free(firstjob->label);
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   279
        free(firstjob);
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   280
        firstjob = newfirst;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   281
        return;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   282
    }
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   283
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   284
    p = firstjob;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   285
    /* Not first job */
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   286
    while (p->next != 0)
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   287
    {
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   288
        if (p->next->jobid == jobid)
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   289
            break;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   290
        p = p->next;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   291
    }
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   292
    if (p->next == 0)
134
5a6b8bb1f7a8 Fixing two bugs noted in buglist.bug (ts clients not dying on removejob, queue
viric@llimona
parents: 120
diff changeset
   293
        error("Job to be removed not found. jobid=%i", jobid);
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   294
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   295
    newnext = p->next->next;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   296
18
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 9
diff changeset
   297
    free(p->next->command);
3
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   298
    free(p->next);
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   299
    p->next = newnext;
2fb8a6bdd024 More code.
viric@llimona
parents:
diff changeset
   300
}
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   301
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   302
/* -1 if no one should be run. */
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   303
int next_run_job()
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   304
{
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   305
    if (state == WAITING)
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   306
        return -1;
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   307
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   308
    if (firstjob != 0)
9
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   309
    {
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   310
        state = WAITING;
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   311
        return firstjob->jobid;
9
9acd8ae3190c First usable version!
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   312
    }
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   313
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   314
    return -1;
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   315
}
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   316
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   317
/* Returns 1000 if no limit, The limit otherwise. */
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   318
static int get_max_finished_jobs()
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   319
{
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   320
    char *limit;
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   321
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   322
    limit = getenv("TS_MAXFINISHED");
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   323
    if (limit == NULL)
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   324
        return 1000;
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   325
    return abs(atoi(limit));
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   326
}
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   327
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   328
/* Add the job to the finished queue. */
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   329
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
   330
{
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   331
    struct Job *p;
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   332
    int count, max;
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   333
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   334
    max = get_max_finished_jobs();
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   335
    count = 0;
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   336
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   337
    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
   338
    {
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   339
        first_finished_job = j;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   340
        first_finished_job->next = 0;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   341
        return;
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
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   344
    ++count;
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   345
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   346
    p = first_finished_job;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   347
    while(p->next != 0)
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   348
    {
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   349
        p = p->next;
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   350
        ++count;
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   351
    }
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   352
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   353
    /* If too many jobs, wipe out the first */
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   354
    if (count >= max)
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   355
    {
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   356
        struct Job *tmp;
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   357
        tmp = first_finished_job;
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   358
        first_finished_job = first_finished_job->next;
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   359
        free(tmp->command);
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   360
        free(tmp->output_filename);
148
a8c5dac8f1e9 Fixing a memory leak in new pinfo.
viric@llimona
parents: 147
diff changeset
   361
        pinfo_free(&tmp->info);
150
a615d7971bf6 Added -L (label)
viric@llimona
parents: 148
diff changeset
   362
        free(tmp->label);
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   363
        free(tmp);
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   364
    }
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   365
    p->next = j;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   366
    p->next->next = 0;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   367
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   368
    return;
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   369
}
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   370
114
bd123730295d times() reporting finished.
viric@mandarina
parents: 113
diff changeset
   371
void job_finished(const struct Result *result)
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   372
{
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   373
    struct Job *newfirst;
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   374
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   375
    if (state != WAITING)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   376
        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
   377
    if (firstjob == 0)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   378
        error("on job finished, firstjob values %x", firstjob);
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   379
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   380
    if (firstjob->state != RUNNING)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   381
        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
   382
                firstjob->state);
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   383
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   384
    /* Mark state */
156
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   385
    if (result->skipped)
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   386
        firstjob->state = SKIPPED;
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   387
    else
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   388
        firstjob->state = FINISHED;
114
bd123730295d times() reporting finished.
viric@mandarina
parents: 113
diff changeset
   389
    firstjob->result = *result;
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   390
    pinfo_set_end_time(&firstjob->info);
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   391
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   392
    /* Add it to the finished queue */
26
19d1bfdaa885 Fixed a bug with the job list.
viric@llimona
parents: 22
diff changeset
   393
    newfirst = firstjob->next;
55
678ca291d545 Now the '-nf' doesn't leave a job in 'finished' state.
viric@llimona
parents: 54
diff changeset
   394
    if (firstjob->should_keep_finished)
678ca291d545 Now the '-nf' doesn't leave a job in 'finished' state.
viric@llimona
parents: 54
diff changeset
   395
        new_finished_job(firstjob);
19
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   396
5efc347cca8d The finished jobs store the errorlevel, and can be listed.
viric@llimona
parents: 18
diff changeset
   397
    /* Remove it from the run queue */
26
19d1bfdaa885 Fixed a bug with the job list.
viric@llimona
parents: 22
diff changeset
   398
    firstjob = newfirst;
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   399
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   400
    state = FREE;
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   401
}
20
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   402
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   403
void s_clear_finished()
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   404
{
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   405
    struct Job *p;
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   406
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   407
    if (first_finished_job == 0)
20
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   408
        return;
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   409
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   410
    p = first_finished_job;
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   411
    first_finished_job = 0;
20
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   412
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   413
    while (p != 0)
20
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   414
    {
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   415
        struct Job *tmp;
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   416
        tmp = p->next;
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   417
        free(p->command);
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   418
        free(p->output_filename);
148
a8c5dac8f1e9 Fixing a memory leak in new pinfo.
viric@llimona
parents: 147
diff changeset
   419
        pinfo_free(&p->info);
150
a615d7971bf6 Added -L (label)
viric@llimona
parents: 148
diff changeset
   420
        free(p->label);
20
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   421
        free(p);
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   422
        p = tmp;
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   423
    }
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 19
diff changeset
   424
}
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   425
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 32
diff changeset
   426
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
   427
{
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   428
    struct Job *p;
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   429
    p = findjob(jobid);
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   430
    if (p == 0)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   431
        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
   432
    if (p->state != RUNNING)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   433
        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
   434
                p->state);
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   435
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 32
diff changeset
   436
    p->pid = pid;
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   437
    p->output_filename = oname;
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   438
    pinfo_set_start_time(&p->info);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   439
}
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   440
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   441
void s_job_info(int s, int jobid)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   442
{
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   443
    struct Job *p = 0;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   444
    struct msg m;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   445
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   446
    if (jobid == -1)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   447
    {
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   448
        /* This means that we want the job info of the running task, or that
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   449
         * of the last job run */
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   450
        if (state == WAITING)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   451
        {
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   452
            p = firstjob;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   453
            if (p == 0)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   454
                error("Internal state WAITING, but job not run."
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   455
                        "firstjob = %x", firstjob);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   456
        }
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   457
        else
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   458
        {
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   459
            p = first_finished_job;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   460
            if (p == 0)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   461
            {
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   462
                send_list_line(s, "No jobs.\n");
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   463
                return;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   464
            }
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   465
            while(p->next != 0)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   466
                p = p->next;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   467
        }
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   468
    } else
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   469
    {
154
b1618fe033aa Fixed a bug on -i, when the job was not running or run. Added Command: in -i.
viric@llimona
parents: 153
diff changeset
   470
        p = firstjob;
b1618fe033aa Fixed a bug on -i, when the job was not running or run. Added Command: in -i.
viric@llimona
parents: 153
diff changeset
   471
        while (p != 0 && p->jobid != jobid)
b1618fe033aa Fixed a bug on -i, when the job was not running or run. Added Command: in -i.
viric@llimona
parents: 153
diff changeset
   472
            p = p->next;
b1618fe033aa Fixed a bug on -i, when the job was not running or run. Added Command: in -i.
viric@llimona
parents: 153
diff changeset
   473
b1618fe033aa Fixed a bug on -i, when the job was not running or run. Added Command: in -i.
viric@llimona
parents: 153
diff changeset
   474
        /* Look in finished jobs if needed */
b1618fe033aa Fixed a bug on -i, when the job was not running or run. Added Command: in -i.
viric@llimona
parents: 153
diff changeset
   475
        if (p == 0)
b1618fe033aa Fixed a bug on -i, when the job was not running or run. Added Command: in -i.
viric@llimona
parents: 153
diff changeset
   476
        {
b1618fe033aa Fixed a bug on -i, when the job was not running or run. Added Command: in -i.
viric@llimona
parents: 153
diff changeset
   477
            p = first_finished_job;
b1618fe033aa Fixed a bug on -i, when the job was not running or run. Added Command: in -i.
viric@llimona
parents: 153
diff changeset
   478
            while (p != 0 && p->jobid != jobid)
b1618fe033aa Fixed a bug on -i, when the job was not running or run. Added Command: in -i.
viric@llimona
parents: 153
diff changeset
   479
                p = p->next;
b1618fe033aa Fixed a bug on -i, when the job was not running or run. Added Command: in -i.
viric@llimona
parents: 153
diff changeset
   480
        }
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   481
    }
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   482
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   483
    if (p == 0)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   484
    {
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   485
        char tmp[50];
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   486
        sprintf(tmp, "Job %i not finished or not running.\n", jobid);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   487
        send_list_line(s, tmp);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   488
        return;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   489
    }
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   490
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   491
    m.type = INFO_DATA;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   492
    send_msg(s, &m);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   493
    pinfo_dump(&p->info, s);
156
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   494
    fd_nprintf(s, 100, "Command: %s", p->depend?"&& ":"");
154
b1618fe033aa Fixed a bug on -i, when the job was not running or run. Added Command: in -i.
viric@llimona
parents: 153
diff changeset
   495
    write(s, p->command, strlen(p->command));
b1618fe033aa Fixed a bug on -i, when the job was not running or run. Added Command: in -i.
viric@llimona
parents: 153
diff changeset
   496
    fd_nprintf(s, 100, "\n");
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   497
    fd_nprintf(s, 100, "Enqueue time: %s",
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   498
            ctime(&p->info.enqueue_time.tv_sec));
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   499
    if (p->state == RUNNING)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   500
    {
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   501
        fd_nprintf(s, 100, "Start time: %s",
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   502
                ctime(&p->info.start_time.tv_sec));
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   503
        fd_nprintf(s, 100, "Time running: %fs\n",
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   504
                pinfo_time_until_now(&p->info));
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   505
    } else if (p->state == FINISHED)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   506
    {
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   507
        fd_nprintf(s, 100, "Start time: %s",
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   508
                ctime(&p->info.start_time.tv_sec));
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   509
        fd_nprintf(s, 100, "End time: %s",
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   510
                ctime(&p->info.end_time.tv_sec));
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   511
        fd_nprintf(s, 100, "Time run: %fs\n",
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   512
                pinfo_time_run(&p->info));
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   513
    }
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 21
diff changeset
   514
}
32
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   515
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   516
void s_send_output(int s, int jobid)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   517
{
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   518
    struct Job *p = 0;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   519
    struct msg m;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   520
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   521
    if (jobid == -1)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   522
    {
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   523
        /* This means that we want the output info of the running task, or that
32
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   524
         * of the last job run */
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   525
        if (state == WAITING)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   526
        {
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   527
            p = firstjob;
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   528
            if (p == 0)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   529
                error("Internal state WAITING, but job not run."
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   530
                        "firstjob = %x", firstjob);
32
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   531
        }
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   532
        else
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   533
        {
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   534
            p = first_finished_job;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   535
            if (p == 0)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   536
            {
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   537
                send_list_line(s, "No jobs.\n");
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   538
                return;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   539
            }
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   540
            while(p->next != 0)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   541
                p = p->next;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   542
        }
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   543
    } else
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   544
    {
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   545
        if (state == WAITING && firstjob->jobid == jobid)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   546
            p = firstjob;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   547
        else
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   548
            p = find_finished_job(jobid);
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   549
    }
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   550
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   551
    if (p == 0)
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   552
    {
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   553
        char tmp[50];
196
bca29e2a1a86 Fixing a bug related to a message on -t on last job, when it was skipped.
viric@llimona
parents: 190
diff changeset
   554
        if (jobid == -1)
bca29e2a1a86 Fixing a bug related to a message on -t on last job, when it was skipped.
viric@llimona
parents: 190
diff changeset
   555
            sprintf(tmp, "The last job has not finished or is not running.\n");
bca29e2a1a86 Fixing a bug related to a message on -t on last job, when it was skipped.
viric@llimona
parents: 190
diff changeset
   556
        else
bca29e2a1a86 Fixing a bug related to a message on -t on last job, when it was skipped.
viric@llimona
parents: 190
diff changeset
   557
            sprintf(tmp, "Job %i not finished or not running.\n", jobid);
32
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   558
        send_list_line(s, tmp);
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   559
        return;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   560
    }
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   561
157
c4909531282e Fixed a bug on new skipped state and -o.
viric@mandarina
parents: 156
diff changeset
   562
    if (p->state == SKIPPED)
156
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   563
    {
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   564
        char tmp[50];
196
bca29e2a1a86 Fixing a bug related to a message on -t on last job, when it was skipped.
viric@llimona
parents: 190
diff changeset
   565
        if (jobid == -1)
bca29e2a1a86 Fixing a bug related to a message on -t on last job, when it was skipped.
viric@llimona
parents: 190
diff changeset
   566
            sprintf(tmp,  "The last job was skipped due to a dependency.\n");
bca29e2a1a86 Fixing a bug related to a message on -t on last job, when it was skipped.
viric@llimona
parents: 190
diff changeset
   567
                    
bca29e2a1a86 Fixing a bug related to a message on -t on last job, when it was skipped.
viric@llimona
parents: 190
diff changeset
   568
        else
bca29e2a1a86 Fixing a bug related to a message on -t on last job, when it was skipped.
viric@llimona
parents: 190
diff changeset
   569
            sprintf(tmp, "Job %i was skipped due to a dependency.\n", jobid);
156
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   570
        send_list_line(s, tmp);
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   571
        return;
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   572
    }
9ac3bd570159 Improved -d (depend) information.
viric@mandarina
parents: 155
diff changeset
   573
32
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   574
    m.type = ANSWER_OUTPUT;
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   575
    m.u.output.store_output = p->store_output;
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 32
diff changeset
   576
    m.u.output.pid = p->pid;
153
3cc22be1ab95 Fixed a bug with -n and -p.
viric@llimona
parents: 150
diff changeset
   577
    if (m.u.output.store_output)
3cc22be1ab95 Fixed a bug with -n and -p.
viric@llimona
parents: 150
diff changeset
   578
        m.u.output.ofilename_size = strlen(p->output_filename) + 1;
3cc22be1ab95 Fixed a bug with -n and -p.
viric@llimona
parents: 150
diff changeset
   579
    else
3cc22be1ab95 Fixed a bug with -n and -p.
viric@llimona
parents: 150
diff changeset
   580
        m.u.output.ofilename_size = 0;
32
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   581
    send_msg(s, &m);
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   582
    send_bytes(s, p->output_filename, m.u.output.ofilename_size);
3531439f2770 Tail works.
viric@llimona
parents: 27
diff changeset
   583
}
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   584
134
5a6b8bb1f7a8 Fixing two bugs noted in buglist.bug (ts clients not dying on removejob, queue
viric@llimona
parents: 120
diff changeset
   585
int s_remove_job(int s, int jobid)
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   586
{
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   587
    struct Job *p = 0;
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   588
    struct msg m;
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   589
    struct Job *before_p = 0;
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   590
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   591
    if (jobid == -1)
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   592
    {
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   593
        /* Find the last job added */
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   594
        p = firstjob;
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   595
        if (p != 0)
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   596
        {
190
a1d9f881740e Fixed "-r" without jobid.
lbatlle@npdl268.bpo.hp.com
parents: 182
diff changeset
   597
            jobid = p->jobid;
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   598
            while (p->next != 0)
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   599
            {
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   600
                before_p = p;
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   601
                p = p->next;
190
a1d9f881740e Fixed "-r" without jobid.
lbatlle@npdl268.bpo.hp.com
parents: 182
diff changeset
   602
                jobid = p->jobid;
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   603
            }
180
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   604
        } else
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   605
        {
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   606
            /* last 'finished' */
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   607
            p = first_finished_job;
190
a1d9f881740e Fixed "-r" without jobid.
lbatlle@npdl268.bpo.hp.com
parents: 182
diff changeset
   608
            if (p)
180
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   609
            {
190
a1d9f881740e Fixed "-r" without jobid.
lbatlle@npdl268.bpo.hp.com
parents: 182
diff changeset
   610
                jobid = p->jobid;
a1d9f881740e Fixed "-r" without jobid.
lbatlle@npdl268.bpo.hp.com
parents: 182
diff changeset
   611
                while (p->next != 0)
a1d9f881740e Fixed "-r" without jobid.
lbatlle@npdl268.bpo.hp.com
parents: 182
diff changeset
   612
                {
a1d9f881740e Fixed "-r" without jobid.
lbatlle@npdl268.bpo.hp.com
parents: 182
diff changeset
   613
                    before_p = p;
a1d9f881740e Fixed "-r" without jobid.
lbatlle@npdl268.bpo.hp.com
parents: 182
diff changeset
   614
                    jobid = p->jobid;
a1d9f881740e Fixed "-r" without jobid.
lbatlle@npdl268.bpo.hp.com
parents: 182
diff changeset
   615
                    p = p->next;
a1d9f881740e Fixed "-r" without jobid.
lbatlle@npdl268.bpo.hp.com
parents: 182
diff changeset
   616
                }
180
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   617
            }
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   618
        }
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   619
    }
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   620
    else
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   621
    {
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   622
        p = firstjob;
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   623
        if (p != 0)
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   624
        {
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   625
            while (p->next != 0 && p->jobid != jobid)
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   626
            {
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   627
                before_p = p;
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   628
                p = p->next;
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   629
            }
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   630
        }
180
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   631
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   632
        /* If not found, look in the 'finished' list */
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   633
        if (p == 0 || p->jobid != jobid)
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   634
        {
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   635
            p = first_finished_job;
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   636
            if (p != 0)
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   637
            {
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   638
                while (p->next != 0 && p->jobid != jobid)
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   639
                {
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   640
                    before_p = p;
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   641
                    p = p->next;
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   642
                }
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   643
            }
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   644
        }
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   645
    }
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   646
182
e4c03200b149 Fixed a problem in -r, when the jobid wasn't found.
viric@llimona
parents: 180
diff changeset
   647
    if (p == 0 || p->state == RUNNING || p == firstjob || p->jobid != jobid)
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   648
    {
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   649
        char tmp[50];
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   650
        if (jobid == -1)
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   651
            sprintf(tmp, "The last job cannot be removed.\n");
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   652
        else
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   653
            sprintf(tmp, "The job %i cannot be removed.\n", jobid);
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   654
        send_list_line(s, tmp);
134
5a6b8bb1f7a8 Fixing two bugs noted in buglist.bug (ts clients not dying on removejob, queue
viric@llimona
parents: 120
diff changeset
   655
        return 0;
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   656
    }
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   657
178
5b64d66a8d89 Fixed awaking the wait_job clients on job removal.
viric@llimona
parents: 176
diff changeset
   658
    /* Tricks for the check_notify_list */
5b64d66a8d89 Fixed awaking the wait_job clients on job removal.
viric@llimona
parents: 176
diff changeset
   659
    p->state = FINISHED;
5b64d66a8d89 Fixed awaking the wait_job clients on job removal.
viric@llimona
parents: 176
diff changeset
   660
    p->result.errorlevel = -1;
5b64d66a8d89 Fixed awaking the wait_job clients on job removal.
viric@llimona
parents: 176
diff changeset
   661
    /* Notify the clients in wait_job */
5b64d66a8d89 Fixed awaking the wait_job clients on job removal.
viric@llimona
parents: 176
diff changeset
   662
    check_notify_list(m.u.jobid);
5b64d66a8d89 Fixed awaking the wait_job clients on job removal.
viric@llimona
parents: 176
diff changeset
   663
180
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   664
    /* Update the list pointers */
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   665
    if (p == first_finished_job)
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   666
        first_finished_job = p->next;
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   667
    else
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   668
        before_p->next = p->next;
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   669
64
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   670
    free(p->command);
2a17c9c7b1d5 Added a limit to the number of finished jobs.
viric@llimona
parents: 63
diff changeset
   671
    free(p->output_filename);
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 134
diff changeset
   672
    pinfo_free(&p->info);
150
a615d7971bf6 Added -L (label)
viric@llimona
parents: 148
diff changeset
   673
    free(p->label);
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   674
    free(p);
180
a35159b7009a Finished jobs can also be removed now.
viric@llimona
parents: 178
diff changeset
   675
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   676
    m.type = REMOVEJOB_OK;
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   677
    send_msg(s, &m);
134
5a6b8bb1f7a8 Fixing two bugs noted in buglist.bug (ts clients not dying on removejob, queue
viric@llimona
parents: 120
diff changeset
   678
    return 1;
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 39
diff changeset
   679
}
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   680
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   681
static void add_to_notify_list(int s, int jobid)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   682
{
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   683
    struct Notify *n;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   684
    struct Notify *new;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   685
195
cbe64953fa1f Bugfix: the -w and -t only worked if there was a *single* ts process waiting.
viric@mandarina
parents: 190
diff changeset
   686
    new = (struct Notify *) malloc(sizeof(*new));
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   687
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   688
    new->socket = s;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   689
    new->jobid = jobid;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   690
    new->next = 0;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   691
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   692
    n = first_notify;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   693
    if (n == 0)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   694
    {
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   695
        first_notify = new;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   696
        return;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   697
    }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   698
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   699
    while(n->next != 0)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   700
        n = n->next;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   701
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   702
    n->next = new;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   703
}
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   704
51
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   705
static void send_waitjob_ok(int s, int errorlevel)
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   706
{
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   707
    struct msg m;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   708
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   709
    m.type = WAITJOB_OK;
112
303834d55e99 More code on times()
viric@mandarina
parents: 104
diff changeset
   710
    m.u.result.errorlevel = errorlevel;
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   711
    send_msg(s, &m);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   712
}
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   713
51
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   714
static struct Job *
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   715
get_job(int jobid)
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   716
{
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   717
    struct Job *j;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   718
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   719
    j = findjob(jobid);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   720
    if (j != NULL)
51
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   721
        return j;
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   722
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   723
    j = find_finished_job(jobid);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   724
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   725
    if (j != NULL)
51
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   726
        return j;
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   727
51
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   728
    return 0;
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   729
}
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   730
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   731
/* Don't complain, if the socket doesn't exist */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   732
void s_remove_notification(int s)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   733
{
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   734
    struct Notify *n;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   735
    struct Notify *previous;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   736
    n = first_notify;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   737
    while (n != 0 && n->socket != s)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   738
        n = n->next;
176
306890eeeffa Fixing a bug on s_remove_job, related to -w and dying with signals
viric@llimona
parents: 166
diff changeset
   739
    if (n == 0 || n->socket != s)
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   740
        return;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   741
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   742
    /* Remove the notification */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   743
    previous = first_notify;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   744
    if (n == previous)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   745
    {
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   746
        free(first_notify);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   747
        first_notify = 0;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   748
        return;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   749
    }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   750
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   751
    /* if not the first... */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   752
    while(previous->next != n)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   753
        previous = previous->next;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   754
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   755
    previous->next = n->next;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   756
    free(n);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   757
}
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   758
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   759
/* This is called when a job finishes */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   760
void check_notify_list(int jobid)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   761
{
206
7acb031b40b8 Better managing of notifications on job finish.
viric@llimona
parents: 198
diff changeset
   762
    struct Notify *n, *tmp;
51
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   763
    struct Job *j;
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   764
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   765
    n = first_notify;
195
cbe64953fa1f Bugfix: the -w and -t only worked if there was a *single* ts process waiting.
viric@mandarina
parents: 190
diff changeset
   766
    while (n != 0)
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   767
    {
206
7acb031b40b8 Better managing of notifications on job finish.
viric@llimona
parents: 198
diff changeset
   768
        tmp = n;
7acb031b40b8 Better managing of notifications on job finish.
viric@llimona
parents: 198
diff changeset
   769
        n = n->next;
7acb031b40b8 Better managing of notifications on job finish.
viric@llimona
parents: 198
diff changeset
   770
        if (tmp->jobid == jobid)
195
cbe64953fa1f Bugfix: the -w and -t only worked if there was a *single* ts process waiting.
viric@mandarina
parents: 190
diff changeset
   771
        {
cbe64953fa1f Bugfix: the -w and -t only worked if there was a *single* ts process waiting.
viric@mandarina
parents: 190
diff changeset
   772
            j = get_job(jobid);
cbe64953fa1f Bugfix: the -w and -t only worked if there was a *single* ts process waiting.
viric@mandarina
parents: 190
diff changeset
   773
            /* If the job finishes, notify the waiter */
cbe64953fa1f Bugfix: the -w and -t only worked if there was a *single* ts process waiting.
viric@mandarina
parents: 190
diff changeset
   774
            if (j->state == FINISHED || j->state == SKIPPED)
cbe64953fa1f Bugfix: the -w and -t only worked if there was a *single* ts process waiting.
viric@mandarina
parents: 190
diff changeset
   775
            {
209
507bd37ab1d3 Bug resolving a pointer when notifying job_ends.
lbatlle@npdl268.bpo.hp.com
parents: 206
diff changeset
   776
                send_waitjob_ok(tmp->socket, j->result.errorlevel);
195
cbe64953fa1f Bugfix: the -w and -t only worked if there was a *single* ts process waiting.
viric@mandarina
parents: 190
diff changeset
   777
                /* We want to get the next Nofity* before we remove
cbe64953fa1f Bugfix: the -w and -t only worked if there was a *single* ts process waiting.
viric@mandarina
parents: 190
diff changeset
   778
                 * the actual 'n'. As s_remove_notification() simply
cbe64953fa1f Bugfix: the -w and -t only worked if there was a *single* ts process waiting.
viric@mandarina
parents: 190
diff changeset
   779
                 * removes the element from the linked list, we can
cbe64953fa1f Bugfix: the -w and -t only worked if there was a *single* ts process waiting.
viric@mandarina
parents: 190
diff changeset
   780
                 * safely follow on the list from n->next. */
cbe64953fa1f Bugfix: the -w and -t only worked if there was a *single* ts process waiting.
viric@mandarina
parents: 190
diff changeset
   781
                s_remove_notification(tmp->socket);
cbe64953fa1f Bugfix: the -w and -t only worked if there was a *single* ts process waiting.
viric@mandarina
parents: 190
diff changeset
   782
            }
cbe64953fa1f Bugfix: the -w and -t only worked if there was a *single* ts process waiting.
viric@mandarina
parents: 190
diff changeset
   783
        }
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   784
    }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   785
}
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   786
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   787
void s_wait_job(int s, int jobid)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   788
{
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   789
    struct Job *p = 0;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   790
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   791
    if (jobid == -1)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   792
    {
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   793
        /* Find the last job added */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   794
        p = firstjob;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   795
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   796
        if (p != 0)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   797
            while (p->next != 0)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   798
                p = p->next;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   799
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   800
        /* Look in finished jobs if needed */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   801
        if (p == 0)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   802
        {
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   803
            p = first_finished_job;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   804
            if (p != 0)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   805
                while (p->next != 0)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   806
                    p = p->next;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   807
        }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   808
    }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   809
    else
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   810
    {
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   811
        p = firstjob;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   812
        while (p != 0 && p->jobid != jobid)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   813
            p = p->next;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   814
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   815
        /* Look in finished jobs if needed */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   816
        if (p == 0)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   817
        {
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   818
            p = first_finished_job;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   819
            while (p != 0 && p->jobid != jobid)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   820
                p = p->next;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   821
        }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   822
    }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   823
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   824
    if (p == 0)
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   825
    {
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   826
        char tmp[50];
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   827
        if (jobid == -1)
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   828
            sprintf(tmp, "The last job cannot be waited.\n");
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   829
        else
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   830
            sprintf(tmp, "The job %i cannot be waited.\n", jobid);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   831
        send_list_line(s, tmp);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   832
        return;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   833
    }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   834
166
8c19a66b5407 Fixing a bug on wait_job on skipped jobs. Moving vnumber to 0.5
viric@vicerveza
parents: 157
diff changeset
   835
    if (p->state == FINISHED || p->state == SKIPPED)
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   836
    {
112
303834d55e99 More code on times()
viric@mandarina
parents: 104
diff changeset
   837
        send_waitjob_ok(s, p->result.errorlevel);
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   838
    }
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   839
    else
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   840
        add_to_notify_list(s, p->jobid);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   841
}
53
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   842
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   843
void s_move_urgent(int s, int jobid)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   844
{
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   845
    struct Job *p = 0;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   846
    struct Job *tmp1;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   847
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   848
    if (jobid == -1)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   849
    {
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   850
        /* Find the last job added */
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   851
        p = firstjob;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   852
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   853
        if (p != 0)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   854
            while (p->next != 0)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   855
                p = p->next;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   856
    }
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   857
    else
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   858
    {
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   859
        p = firstjob;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   860
        while (p != 0 && p->jobid != jobid)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   861
            p = p->next;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   862
    }
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   863
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   864
    if (p == 0 || firstjob->next == 0)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   865
    {
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   866
        char tmp[50];
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   867
        if (jobid == -1)
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   868
            sprintf(tmp, "The last job cannot be urged.\n");
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   869
        else
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   870
            sprintf(tmp, "The job %i cannot be urged.\n", jobid);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   871
        send_list_line(s, tmp);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   872
        return;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   873
    }
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   874
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   875
    /* Interchange the pointers */
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   876
    tmp1 = find_previous_job(p);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   877
    tmp1->next = p->next;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   878
    p->next = firstjob->next;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   879
    firstjob->next = p;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   880
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   881
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   882
    send_urgent_ok(s);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 51
diff changeset
   883
}
63
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   884
66
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   885
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
   886
{
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   887
    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
   888
    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
   889
    struct Job *tmp;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   890
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   891
    p1 = findjob(jobid1);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   892
    p2 = findjob(jobid2);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   893
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   894
    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
   895
    {
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   896
        char prev[60];
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   897
        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
   898
        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
   899
        return;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   900
    }
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   901
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   902
    /* Interchange the pointers */
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   903
    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
   904
    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
   905
    prev1->next = p2;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   906
    prev2->next = p1;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   907
    tmp = p1->next;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   908
    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
   909
    p2->next = tmp;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   910
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   911
    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
   912
}
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 64
diff changeset
   913
63
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   914
static void send_state(int s, enum Jobstate state)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   915
{
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   916
    struct msg m;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   917
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   918
    m.type = ANSWER_STATE;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   919
    m.u.state = state;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   920
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   921
    send_msg(s, &m);
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   922
}
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   923
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   924
void s_send_state(int s, int jobid)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   925
{
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   926
    struct Job *p = 0;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   927
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   928
    if (jobid == -1)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   929
    {
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   930
        /* Find the last job added */
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   931
        p = firstjob;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   932
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   933
        if (p != 0)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   934
            while (p->next != 0)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   935
                p = p->next;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   936
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   937
        /* Look in finished jobs if needed */
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   938
        if (p == 0)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   939
        {
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   940
            p = first_finished_job;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   941
            if (p != 0)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   942
                while (p->next != 0)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   943
                    p = p->next;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   944
        }
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   945
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   946
    }
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   947
    else
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   948
    {
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   949
        p = get_job(jobid);
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   950
    }
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   951
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   952
    if (p == 0)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   953
    {
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   954
        char tmp[50];
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   955
        if (jobid == -1)
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   956
            sprintf(tmp, "The last job cannot be stated.\n");
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   957
        else
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   958
            sprintf(tmp, "The job %i cannot be stated.\n", jobid);
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   959
        send_list_line(s, tmp);
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   960
        return;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   961
    }
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   962
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   963
    /* Interchange the pointers */
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   964
    send_state(s, p->state);
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 55
diff changeset
   965
}
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   966
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   967
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
   968
{
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   969
    fprintf(out, "  new_job\n");
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   970
    fprintf(out, "    jobid %i\n", p->jobid);
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   971
    fprintf(out, "    command \"%s\"\n", p->command);
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   972
    fprintf(out, "    state %s\n",
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   973
            jstate2string(p->state));
112
303834d55e99 More code on times()
viric@mandarina
parents: 104
diff changeset
   974
    fprintf(out, "    result.errorlevel %i\n", p->result.errorlevel);
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   975
    fprintf(out, "    output_filename \"%s\"\n",
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   976
            p->output_filename ? p->output_filename : "NULL");
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   977
    fprintf(out, "    store_output %i\n", p->store_output);
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   978
    fprintf(out, "    pid %i\n", p->pid);
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   979
    fprintf(out, "    should_keep_finished %i\n", p->pid);
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   980
}
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   981
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   982
void dump_jobs_struct(FILE *out)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   983
{
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   984
    const struct Job *p;
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   985
104
dc4dd9939238 Fixed error reporting.
viric@llimona
parents: 92
diff changeset
   986
    fprintf(out, "New_jobs\n");
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   987
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   988
    p = firstjob;
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   989
    while (p != 0)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   990
    {
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   991
        dump_job_struct(out, p);
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   992
        p = p->next;
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   993
    }
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   994
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   995
    p = first_finished_job;
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   996
    while (p != 0)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   997
    {
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   998
        dump_job_struct(out, p);
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
   999
        p = p->next;
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
  1000
    }
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 66
diff changeset
  1001
}
120
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1002
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1003
void joblist_dump(int fd)
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1004
{
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1005
    struct Job *p;
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1006
    char *buffer;
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1007
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1008
    buffer = joblistdump_headers();
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1009
    write(fd,buffer, strlen(buffer));
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1010
    free(buffer);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1011
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1012
    /* We reuse the headers from the list */
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1013
    buffer = joblist_headers();
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1014
    write(fd, "# ", 2);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1015
    write(fd, buffer, strlen(buffer));
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1016
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1017
    /* Show Finished jobs */
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1018
    p = first_finished_job;
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1019
    while(p != 0)
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1020
    {
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1021
        buffer = joblist_line(p);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1022
        write(fd, "# ", 2);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1023
        write(fd,buffer, strlen(buffer));
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1024
        free(buffer);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1025
        p = p->next;
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1026
    }
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1027
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1028
    write(fd, "\n", 1);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1029
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1030
    /* Show Queued or Running jobs */
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1031
    p = firstjob;
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1032
    while(p != 0)
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1033
    {
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1034
        buffer = joblistdump_torun(p);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1035
        write(fd,buffer,strlen(buffer));
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1036
        free(buffer);
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1037
        p = p->next;
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1038
    }
790bc4cecd3b Added TS_SAVELIST.
viric@llimona
parents: 117
diff changeset
  1039
}