diff options
Diffstat (limited to 'src/service/peerstore/perf_peerstore_store.c')
-rw-r--r-- | src/service/peerstore/perf_peerstore_store.c | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/src/service/peerstore/perf_peerstore_store.c b/src/service/peerstore/perf_peerstore_store.c index e59af61e5..e328be93e 100644 --- a/src/service/peerstore/perf_peerstore_store.c +++ b/src/service/peerstore/perf_peerstore_store.c | |||
@@ -32,16 +32,20 @@ static int ok = 1; | |||
32 | 32 | ||
33 | static struct GNUNET_PEERSTORE_Handle *h; | 33 | static struct GNUNET_PEERSTORE_Handle *h; |
34 | 34 | ||
35 | static struct GNUNET_PEERSTORE_WatchContext *wc; | ||
36 | |||
35 | static char *ss = "test_peerstore_stress"; | 37 | static char *ss = "test_peerstore_stress"; |
36 | static struct GNUNET_PeerIdentity p; | 38 | static struct GNUNET_PeerIdentity p; |
37 | static char *k = "test_peerstore_stress_key"; | 39 | static char *k = "test_peerstore_stress_key"; |
38 | static char *v = "test_peerstore_stress_val"; | 40 | static char *v = "test_peerstore_stress_val"; |
39 | 41 | ||
40 | static int count = 0; | 42 | static int count = 0; |
43 | static int count_fin = 0; | ||
41 | 44 | ||
42 | static void | 45 | static void |
43 | disconnect () | 46 | disconnect (void *cls) |
44 | { | 47 | { |
48 | GNUNET_PEERSTORE_watch_cancel (wc); | ||
45 | if (NULL != h) | 49 | if (NULL != h) |
46 | GNUNET_PEERSTORE_disconnect (h); | 50 | GNUNET_PEERSTORE_disconnect (h); |
47 | GNUNET_SCHEDULER_shutdown (); | 51 | GNUNET_SCHEDULER_shutdown (); |
@@ -49,14 +53,27 @@ disconnect () | |||
49 | 53 | ||
50 | 54 | ||
51 | static void | 55 | static void |
56 | store_cont (void *cls, int ret) | ||
57 | { | ||
58 | count_fin++; | ||
59 | if (count_fin == count) | ||
60 | { | ||
61 | ok = 0; | ||
62 | GNUNET_SCHEDULER_add_now (&disconnect, NULL); | ||
63 | } | ||
64 | } | ||
65 | |||
66 | |||
67 | static void | ||
52 | store () | 68 | store () |
53 | { | 69 | { |
70 | count++; | ||
54 | GNUNET_PEERSTORE_store (h, ss, &p, k, v, strlen (v) + 1, | 71 | GNUNET_PEERSTORE_store (h, ss, &p, k, v, strlen (v) + 1, |
55 | GNUNET_TIME_UNIT_FOREVER_ABS, | 72 | GNUNET_TIME_UNIT_FOREVER_ABS, |
56 | (count == | 73 | (count == |
57 | 0) ? GNUNET_PEERSTORE_STOREOPTION_REPLACE : | 74 | 0) ? GNUNET_PEERSTORE_STOREOPTION_REPLACE : |
58 | GNUNET_PEERSTORE_STOREOPTION_MULTIPLE, NULL, NULL); | 75 | GNUNET_PEERSTORE_STOREOPTION_MULTIPLE, store_cont, |
59 | count++; | 76 | NULL); |
60 | } | 77 | } |
61 | 78 | ||
62 | 79 | ||
@@ -65,12 +82,7 @@ watch_cb (void *cls, const struct GNUNET_PEERSTORE_Record *record, | |||
65 | const char *emsg) | 82 | const char *emsg) |
66 | { | 83 | { |
67 | GNUNET_assert (NULL == emsg); | 84 | GNUNET_assert (NULL == emsg); |
68 | if (STORES == count) | 85 | if (STORES > count) |
69 | { | ||
70 | ok = 0; | ||
71 | disconnect (); | ||
72 | } | ||
73 | else | ||
74 | store (); | 86 | store (); |
75 | } | 87 | } |
76 | 88 | ||
@@ -82,7 +94,7 @@ run (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
82 | memset (&p, 5, sizeof(p)); | 94 | memset (&p, 5, sizeof(p)); |
83 | h = GNUNET_PEERSTORE_connect (cfg); | 95 | h = GNUNET_PEERSTORE_connect (cfg); |
84 | GNUNET_assert (NULL != h); | 96 | GNUNET_assert (NULL != h); |
85 | GNUNET_PEERSTORE_watch (h, ss, &p, k, &watch_cb, NULL); | 97 | wc = GNUNET_PEERSTORE_watch (h, ss, &p, k, &watch_cb, NULL); |
86 | store (); | 98 | store (); |
87 | } | 99 | } |
88 | 100 | ||