-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstats.c
140 lines (129 loc) · 3.9 KB
/
stats.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
* chatterbox Progetto del corso di LSO 2017/2018
*
* Dipartimento di Informatica Università di Pisa
* Docenti: Prencipe, Torquati
*
*/
/** @file stats.c
* @author Francesco Pirrò 544539
* si dichiara che il contenuto di questo file è in ogni sua parte opera originale dell'autore
*/
#include <stats.h>
#include <config.h>
#include<stdlib.h>
/**
* @function initializeStats
* @brief inizializza la struttura dati per le statistiche
* @param stats puntatore alla struttura dati statistics da inizializzare
* @return 0 successo, -1 errore da
*/
int initializeStats(struct statistics* stats){
SYSCALLCHECK(pthread_mutex_init(&((stats)->lock),NULL),"Inizializzazione Mutex Lock");
(stats)->nusers=0;
(stats)->nonline=0;
(stats)->ndelivered=0;
(stats)->nnotdelivered=0;
(stats)->nfiledelivered=0;
(stats)->nfilenotdelivered=0;
(stats)->nerrors=0;
return 0;
}
/**
* @function updusers
* @brief aggiorna la statistica nusers
* @param stats struttura che conserva le statistiche
* @param n numero da sommare a nusers (puo' essere positivo o negativo)
*/
void updusers(struct statistics* stats, int n){
LOCKACQUIRE(stats->lock);
stats->nusers += n;
LOCKRELEASE(stats->lock);
}
/**
* @function updonline
* @brief aggiorna la statistica nonline
* @param stats struttura che conserva le statistiche
* @param n numero da sommare a nusers (puo' essere positivo o negativo)
*/
void updonline(struct statistics* stats, int n){
LOCKACQUIRE(stats->lock);
stats->nonline += n;
LOCKRELEASE(stats->lock);
}
/**
* @function updelivered
* @brief aggiorna la statistica ndelivered
* @param stats struttura che conserva le statistiche
* @param n numero da sommare a ndelivered (puo' essere positivo o negativo)
*/
void updelivered(struct statistics* stats, int n){
LOCKACQUIRE(stats->lock);
stats->ndelivered += n;
LOCKRELEASE(stats->lock);
}
/**
* @function updndelivered
* @brief aggiorna la statistica nnotdelivered
* @param stats struttura che conserva le statistiche
* @param n numero da sommare a nnotdelivered (puo' essere positivo o negativo)
*/
void updndelivered(struct statistics* stats, int n){
LOCKACQUIRE(stats->lock);
stats->nnotdelivered += n;
LOCKRELEASE(stats->lock);
}
/**
* @function updfile
* @brief aggiorna la statistica nfiledelivered
* @param stats struttura che conserva le statistiche
* @param n numero da sommare a nfiledelivered (puo' essere positivo o negativo)
*/
void updfile(struct statistics* stats, int n){
LOCKACQUIRE(stats->lock);
stats->nfiledelivered += n;
LOCKRELEASE(stats->lock);
}
/**
* @function updnfile
* @brief aggiorna la statistica nfilenotdelivered
* @param stats struttura che conserva le statistiche
* @param n numero da sommare a nfilenotdelivered (puo' essere positivo o negativo)
*/
void updnfile(struct statistics* stats, int n){
LOCKACQUIRE(stats->lock);
stats->nfilenotdelivered += n;
LOCKRELEASE(stats->lock);
}
/**
* @function upderrors
* @brief aggiorna la statistica nerrors
* @param stats struttura che conserva le statistiche
* @param n numero da sommare a nerrors (puo' essere positivo o negativo)
*/
void upderrors(struct statistics* stats, int n){
LOCKACQUIRE(stats->lock);
stats->nerrors += n;
LOCKRELEASE(stats->lock);
}
/**
* @function getnusers
* @brief restituisce il numero di utenti registrati
* @param stats struttura che conserva le statistiche
* @return numero di utenti registrati
*/
int getnusers(struct statistics* stats){
int ret=0;
LOCKACQUIRE(stats->lock);
ret=stats->nusers;
LOCKRELEASE(stats->lock);
return ret;
}
/**
* @function destroystats
* @brief funzione che libera la struttura che conserva le statistiche
* @param stats struttura che conserva le statistiche
*/
void destroystats(struct statistics* stats){
if((errno=pthread_mutex_destroy(&stats->lock))) perror("Cancellamento Mutex"); //distrugge il mutex lock
}