A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'hypervisor' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid into hypervisor
[simgrid.git]
/
src
/
xbt
/
xbt_queue.c
diff --git
a/src/xbt/xbt_queue.c
b/src/xbt/xbt_queue.c
index
74b19d9
..
78e578c
100644
(file)
--- a/
src/xbt/xbt_queue.c
+++ b/
src/xbt/xbt_queue.c
@@
-11,11
+11,11
@@
#include "xbt/sysdep.h"
#include "xbt/log.h"
#include "xbt/dynar.h"
#include "xbt/sysdep.h"
#include "xbt/log.h"
#include "xbt/dynar.h"
+#include "xbt/synchro_core.h"
-#include "xbt/synchro.h"
#include "xbt/queue.h" /* this module */
#include "xbt/queue.h" /* this module */
-#include "gras/virtu.h"
-
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_queue, xbt,
"Message exchanging queue");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_queue, xbt,
+
"Message exchanging queue");
typedef struct s_xbt_queue_ {
int capacity;
typedef struct s_xbt_queue_ {
int capacity;
@@
-32,7
+32,8
@@
typedef struct s_xbt_queue_ {
xbt_queue_t xbt_queue_new(int capacity, unsigned long elm_size)
{
xbt_queue_t res = xbt_new0(s_xbt_queue_t, 1);
xbt_queue_t xbt_queue_new(int capacity, unsigned long elm_size)
{
xbt_queue_t res = xbt_new0(s_xbt_queue_t, 1);
- xbt_assert0(capacity >= 0, "Capacity cannot be negative");
+ if (capacity<0)
+ capacity=0;
res->capacity = capacity;
res->data = xbt_dynar_new(elm_size, NULL);
res->capacity = capacity;
res->data = xbt_dynar_new(elm_size, NULL);
@@
-53,7
+54,7
@@
void xbt_queue_free(xbt_queue_t * queue)
xbt_mutex_destroy((*queue)->mutex);
xbt_cond_destroy((*queue)->not_full);
xbt_cond_destroy((*queue)->not_empty);
xbt_mutex_destroy((*queue)->mutex);
xbt_cond_destroy((*queue)->not_full);
xbt_cond_destroy((*queue)->not_empty);
- free(
(*queue)
);
+ free(
*queue
);
*queue = NULL;
}
*queue = NULL;
}
@@
-78,7
+79,8
@@
void xbt_queue_push(xbt_queue_t queue, const void *src)
xbt_mutex_acquire(queue->mutex);
while (queue->capacity != 0
&& queue->capacity == xbt_dynar_length(queue->data)) {
xbt_mutex_acquire(queue->mutex);
while (queue->capacity != 0
&& queue->capacity == xbt_dynar_length(queue->data)) {
- DEBUG2("Capacity of %p exceded (=%d). Waiting", queue, queue->capacity);
+ XBT_DEBUG("Capacity of %p exceeded (=%d). Waiting", queue,
+ queue->capacity);
xbt_cond_wait(queue->not_full, queue->mutex);
}
xbt_dynar_push(queue->data, src);
xbt_cond_wait(queue->not_full, queue->mutex);
}
xbt_dynar_push(queue->data, src);
@@
-97,8
+99,8
@@
void xbt_queue_push(xbt_queue_t queue, const void *src)
void xbt_queue_pop(xbt_queue_t queue, void *const dst)
{
xbt_mutex_acquire(queue->mutex);
void xbt_queue_pop(xbt_queue_t queue, void *const dst)
{
xbt_mutex_acquire(queue->mutex);
- while (xbt_dynar_
length(queue->data) == 0
) {
-
DEBUG1
("Queue %p empty. Waiting", queue);
+ while (xbt_dynar_
is_empty(queue->data)
) {
+
XBT_DEBUG
("Queue %p empty. Waiting", queue);
xbt_cond_wait(queue->not_empty, queue->mutex);
}
xbt_dynar_pop(queue->data, dst);
xbt_cond_wait(queue->not_empty, queue->mutex);
}
xbt_dynar_pop(queue->data, dst);
@@
-117,7
+119,8
@@
void xbt_queue_unshift(xbt_queue_t queue, const void *src)
xbt_mutex_acquire(queue->mutex);
while (queue->capacity != 0
&& queue->capacity == xbt_dynar_length(queue->data)) {
xbt_mutex_acquire(queue->mutex);
while (queue->capacity != 0
&& queue->capacity == xbt_dynar_length(queue->data)) {
- DEBUG2("Capacity of %p exceded (=%d). Waiting", queue, queue->capacity);
+ XBT_DEBUG("Capacity of %p exceeded (=%d). Waiting", queue,
+ queue->capacity);
xbt_cond_wait(queue->not_full, queue->mutex);
}
xbt_dynar_unshift(queue->data, src);
xbt_cond_wait(queue->not_full, queue->mutex);
}
xbt_dynar_unshift(queue->data, src);
@@
-136,8
+139,8
@@
void xbt_queue_unshift(xbt_queue_t queue, const void *src)
void xbt_queue_shift(xbt_queue_t queue, void *const dst)
{
xbt_mutex_acquire(queue->mutex);
void xbt_queue_shift(xbt_queue_t queue, void *const dst)
{
xbt_mutex_acquire(queue->mutex);
- while (xbt_dynar_
length(queue->data) == 0
) {
-
DEBUG1
("Queue %p empty. Waiting", queue);
+ while (xbt_dynar_
is_empty(queue->data)
) {
+
XBT_DEBUG
("Queue %p empty. Waiting", queue);
xbt_cond_wait(queue->not_empty, queue->mutex);
}
xbt_dynar_shift(queue->data, dst);
xbt_cond_wait(queue->not_empty, queue->mutex);
}
xbt_dynar_shift(queue->data, dst);
@@
-155,7
+158,6
@@
void xbt_queue_shift(xbt_queue_t queue, void *const dst)
void xbt_queue_push_timed(xbt_queue_t queue, const void *src, double delay)
{
double begin = xbt_time();
void xbt_queue_push_timed(xbt_queue_t queue, const void *src, double delay)
{
double begin = xbt_time();
- xbt_ex_t e;
xbt_mutex_acquire(queue->mutex);
xbt_mutex_acquire(queue->mutex);
@@
-164,20
+166,22
@@
void xbt_queue_push_timed(xbt_queue_t queue, const void *src, double delay)
queue->capacity == xbt_dynar_length(queue->data)) {
xbt_mutex_release(queue->mutex);
queue->capacity == xbt_dynar_length(queue->data)) {
xbt_mutex_release(queue->mutex);
- THROW2(timeout_error, 0, "Capacity of %p exceded (=%d), and delay = 0",
- queue, queue->capacity);
+ THROWF(timeout_error, 0,
+ "Capacity of %p exceeded (=%d), and delay = 0", queue,
+ queue->capacity);
}
} else {
while (queue->capacity != 0 &&
queue->capacity == xbt_dynar_length(queue->data) &&
(delay < 0 || (xbt_time() - begin) <= delay)) {
}
} else {
while (queue->capacity != 0 &&
queue->capacity == xbt_dynar_length(queue->data) &&
(delay < 0 || (xbt_time() - begin) <= delay)) {
- DEBUG2("Capacity of %p exceded (=%d). Waiting", queue, queue->capacity);
+ XBT_DEBUG("Capacity of %p exceeded (=%d). Waiting", queue,
+ queue->capacity);
TRY {
xbt_cond_timedwait(queue->not_full, queue->mutex,
delay < 0 ? -1 : delay - (xbt_time() - begin));
}
TRY {
xbt_cond_timedwait(queue->not_full, queue->mutex,
delay < 0 ? -1 : delay - (xbt_time() - begin));
}
- CATCH
(e)
{
+ CATCH
_ANONYMOUS
{
xbt_mutex_release(queue->mutex);
RETHROW;
}
xbt_mutex_release(queue->mutex);
RETHROW;
}
@@
-198,24
+202,23
@@
void xbt_queue_push_timed(xbt_queue_t queue, const void *src, double delay)
void xbt_queue_pop_timed(xbt_queue_t queue, void *const dst, double delay)
{
double begin = xbt_time();
void xbt_queue_pop_timed(xbt_queue_t queue, void *const dst, double delay)
{
double begin = xbt_time();
- xbt_ex_t e;
xbt_mutex_acquire(queue->mutex);
if (delay == 0) {
xbt_mutex_acquire(queue->mutex);
if (delay == 0) {
- if (xbt_dynar_
length(queue->data) == 0
) {
+ if (xbt_dynar_
is_empty(queue->data)
) {
xbt_mutex_release(queue->mutex);
xbt_mutex_release(queue->mutex);
- THROW
0
(timeout_error, 0, "Delay = 0, and queue is empty");
+ THROW
F
(timeout_error, 0, "Delay = 0, and queue is empty");
}
} else {
}
} else {
- while ((xbt_dynar_
length(queue->data) == 0
) &&
+ while ((xbt_dynar_
is_empty(queue->data)
) &&
(delay < 0 || (xbt_time() - begin) <= delay)) {
(delay < 0 || (xbt_time() - begin) <= delay)) {
-
DEBUG1
("Queue %p empty. Waiting", queue);
+
XBT_DEBUG
("Queue %p empty. Waiting", queue);
TRY {
xbt_cond_timedwait(queue->not_empty, queue->mutex,
delay < 0 ? -1 : delay - (xbt_time() - begin));
}
TRY {
xbt_cond_timedwait(queue->not_empty, queue->mutex,
delay < 0 ? -1 : delay - (xbt_time() - begin));
}
- CATCH
(e)
{
+ CATCH
_ANONYMOUS
{
xbt_mutex_release(queue->mutex);
RETHROW;
}
xbt_mutex_release(queue->mutex);
RETHROW;
}
@@
-231,10
+234,10
@@
void xbt_queue_pop_timed(xbt_queue_t queue, void *const dst, double delay)
*
* @see #xbt_queue_unshift
*/
*
* @see #xbt_queue_unshift
*/
-void xbt_queue_unshift_timed(xbt_queue_t queue, const void *src, double delay)
+void xbt_queue_unshift_timed(xbt_queue_t queue, const void *src,
+ double delay)
{
double begin = xbt_time();
{
double begin = xbt_time();
- xbt_ex_t e;
xbt_mutex_acquire(queue->mutex);
xbt_mutex_acquire(queue->mutex);
@@
-243,20
+246,22
@@
void xbt_queue_unshift_timed(xbt_queue_t queue, const void *src, double delay)
queue->capacity == xbt_dynar_length(queue->data)) {
xbt_mutex_release(queue->mutex);
queue->capacity == xbt_dynar_length(queue->data)) {
xbt_mutex_release(queue->mutex);
- THROW2(timeout_error, 0, "Capacity of %p exceded (=%d), and delay = 0",
- queue, queue->capacity);
+ THROWF(timeout_error, 0,
+ "Capacity of %p exceeded (=%d), and delay = 0", queue,
+ queue->capacity);
}
} else {
while (queue->capacity != 0 &&
queue->capacity == xbt_dynar_length(queue->data) &&
(delay < 0 || (xbt_time() - begin) <= delay)) {
}
} else {
while (queue->capacity != 0 &&
queue->capacity == xbt_dynar_length(queue->data) &&
(delay < 0 || (xbt_time() - begin) <= delay)) {
- DEBUG2("Capacity of %p exceded (=%d). Waiting", queue, queue->capacity);
+ XBT_DEBUG("Capacity of %p exceeded (=%d). Waiting", queue,
+ queue->capacity);
TRY {
xbt_cond_timedwait(queue->not_full, queue->mutex,
delay < 0 ? -1 : delay - (xbt_time() - begin));
}
TRY {
xbt_cond_timedwait(queue->not_full, queue->mutex,
delay < 0 ? -1 : delay - (xbt_time() - begin));
}
- CATCH
(e)
{
+ CATCH
_ANONYMOUS
{
xbt_mutex_release(queue->mutex);
RETHROW;
}
xbt_mutex_release(queue->mutex);
RETHROW;
}
@@
-274,36
+279,36
@@
void xbt_queue_unshift_timed(xbt_queue_t queue, const void *src, double delay)
* @see #xbt_queue_shift
*
*/
* @see #xbt_queue_shift
*
*/
-void xbt_queue_shift_timed(xbt_queue_t queue, void *const dst, double delay)
+void xbt_queue_shift_timed(xbt_queue_t queue, void *const dst,
+ double delay)
{
double begin = xbt_time();
{
double begin = xbt_time();
- xbt_ex_t e;
xbt_mutex_acquire(queue->mutex);
if (delay == 0) {
xbt_mutex_acquire(queue->mutex);
if (delay == 0) {
- if (xbt_dynar_
length(queue->data) == 0
) {
+ if (xbt_dynar_
is_empty(queue->data)
) {
xbt_mutex_release(queue->mutex);
xbt_mutex_release(queue->mutex);
- THROW
0
(timeout_error, 0, "Delay = 0, and queue is empty");
+ THROW
F
(timeout_error, 0, "Delay = 0, and queue is empty");
}
} else {
}
} else {
- while ((xbt_dynar_
length(queue->data) == 0
) &&
+ while ((xbt_dynar_
is_empty(queue->data)
) &&
(delay < 0 || (xbt_time() - begin) <= delay)) {
(delay < 0 || (xbt_time() - begin) <= delay)) {
-
DEBUG1
("Queue %p empty. Waiting", queue);
+
XBT_DEBUG
("Queue %p empty. Waiting", queue);
TRY {
xbt_cond_timedwait(queue->not_empty, queue->mutex,
delay < 0 ? -1 : delay - (xbt_time() - begin));
}
TRY {
xbt_cond_timedwait(queue->not_empty, queue->mutex,
delay < 0 ? -1 : delay - (xbt_time() - begin));
}
- CATCH
(e)
{
+ CATCH
_ANONYMOUS
{
xbt_mutex_release(queue->mutex);
RETHROW;
}
}
}
xbt_mutex_release(queue->mutex);
RETHROW;
}
}
}
- if (xbt_dynar_
length(queue->data) == 0
) {
+ if (xbt_dynar_
is_empty(queue->data)
) {
xbt_mutex_release(queue->mutex);
xbt_mutex_release(queue->mutex);
- THROW
1
(timeout_error, 0, "Timeout (%f) elapsed, but queue still empty",
+ THROW
F
(timeout_error, 0, "Timeout (%f) elapsed, but queue still empty",
delay);
}
delay);
}