~ubuntu-branches/ubuntu/vivid/mpich/vivid-proposed

« back to all changes in this revision

Viewing changes to src/pm/hydra/pm/pmiserv/pmiserv_pmi.c

  • Committer: Package Import Robot
  • Author(s): Anton Gladky
  • Date: 2014-04-01 20:24:20 UTC
  • mfrom: (5.2.4 sid)
  • Revision ID: package-import@ubuntu.com-20140401202420-t5ey1ia2klt5dkq3
Tags: 3.1-4
* [c3e3398] Disable test_primitives, which is unreliable on some platforms.
            (Closes: #743047)
* [265a699] Add minimal autotest.

Show diffs side-by-side

added added

removed removed

Lines of Context:
63
63
HYD_status HYD_pmcd_pmi_publish(char *name, char *port, int *success)
64
64
{
65
65
    struct HYD_pmcd_pmi_publish *r, *publish;
66
 
    char *ns, *ns_host, *ns_port_str, *tmp[HYD_NUM_TMP_STRINGS];
67
 
    int ns_port, ns_fd, i;
 
66
    struct HYD_string_stash stash;
 
67
    char *ns, *ns_host, *ns_port_str;
 
68
    int ns_port, ns_fd;
68
69
    HYD_status status = HYD_SUCCESS;
69
70
 
70
71
    HYDU_FUNC_ENTER();
115
116
        status = HYDU_sock_connect(ns_host, (uint16_t) ns_port, &ns_fd, 0, HYD_CONNECT_DELAY);
116
117
        HYDU_ERR_POP(status, "error connecting to the nameserver\n");
117
118
 
118
 
        i = 0;
119
 
        tmp[i++] = HYDU_strdup("PUBLISH");
120
 
        tmp[i++] = HYDU_strdup(name);
121
 
        tmp[i++] = HYDU_strdup(port);
122
 
        tmp[i++] = NULL;
 
119
        HYD_STRING_STASH_INIT(stash);
 
120
        HYD_STRING_STASH(stash, HYDU_strdup("PUBLISH"), status);
 
121
        HYD_STRING_STASH(stash, HYDU_strdup(name), status);
 
122
        HYD_STRING_STASH(stash, HYDU_strdup(port), status);
123
123
 
124
 
        status = HYDU_send_strlist(ns_fd, tmp);
 
124
        status = HYDU_send_strlist(ns_fd, stash.strlist);
125
125
        HYDU_ERR_POP(status, "error sending string list\n");
126
 
        HYDU_free_strlist(tmp);
 
126
        HYD_STRING_STASH_FREE(stash);
127
127
 
128
 
        status = HYDU_sock_read(ns_fd, &len, sizeof(int), &recvd, &closed,
129
 
                                HYDU_SOCK_COMM_MSGWAIT);
 
128
        status = HYDU_sock_read(ns_fd, &len, sizeof(int), &recvd, &closed, HYDU_SOCK_COMM_MSGWAIT);
130
129
        HYDU_ERR_POP(status, "error reading from nameserver\n");
131
130
        HYDU_ASSERT(!closed, status);
132
131
 
156
155
HYD_status HYD_pmcd_pmi_unpublish(char *name, int *success)
157
156
{
158
157
    struct HYD_pmcd_pmi_publish *r, *publish;
159
 
    char *ns, *ns_host, *ns_port_str, *tmp[HYD_NUM_TMP_STRINGS];
160
 
    int ns_port, ns_fd, i;
 
158
    struct HYD_string_stash stash;
 
159
    char *ns, *ns_host, *ns_port_str;
 
160
    int ns_port, ns_fd;
161
161
    HYD_status status = HYD_SUCCESS;
162
162
 
163
163
    HYDU_FUNC_ENTER();
165
165
    *success = 0;
166
166
    if (HYD_server_info.nameserver == NULL) {
167
167
        /* no external nameserver available */
 
168
 
 
169
        if (!HYD_pmcd_pmi_publish_list) {
 
170
            /* nothing is published yet */
 
171
            goto fn_exit;
 
172
        }
 
173
 
168
174
        if (!strcmp(HYD_pmcd_pmi_publish_list->name, name)) {
169
175
            publish = HYD_pmcd_pmi_publish_list;
170
176
            HYD_pmcd_pmi_publish_list = HYD_pmcd_pmi_publish_list->next;
213
219
        status = HYDU_sock_connect(ns_host, (uint16_t) ns_port, &ns_fd, 0, HYD_CONNECT_DELAY);
214
220
        HYDU_ERR_POP(status, "error connecting to the nameserver\n");
215
221
 
216
 
        i = 0;
217
 
        tmp[i++] = HYDU_strdup("UNPUBLISH");
218
 
        tmp[i++] = HYDU_strdup(name);
219
 
        tmp[i++] = NULL;
 
222
        HYD_STRING_STASH_INIT(stash);
 
223
        HYD_STRING_STASH(stash, HYDU_strdup("UNPUBLISH"), status);
 
224
        HYD_STRING_STASH(stash, HYDU_strdup(name), status);
220
225
 
221
 
        status = HYDU_send_strlist(ns_fd, tmp);
 
226
        status = HYDU_send_strlist(ns_fd, stash.strlist);
222
227
        HYDU_ERR_POP(status, "error sending string list\n");
 
228
        HYD_STRING_STASH_FREE(stash);
223
229
 
224
 
        status = HYDU_sock_read(ns_fd, &len, sizeof(int), &recvd, &closed,
225
 
                                HYDU_SOCK_COMM_MSGWAIT);
 
230
        status = HYDU_sock_read(ns_fd, &len, sizeof(int), &recvd, &closed, HYDU_SOCK_COMM_MSGWAIT);
226
231
        HYDU_ERR_POP(status, "error reading from nameserver\n");
227
232
        HYDU_ASSERT(!closed, status);
228
233
 
249
254
HYD_status HYD_pmcd_pmi_lookup(char *name, char **value)
250
255
{
251
256
    struct HYD_pmcd_pmi_publish *publish;
252
 
    char *ns, *ns_host, *ns_port_str, *tmp[HYD_NUM_TMP_STRINGS];
253
 
    int ns_port, ns_fd, i;
 
257
    struct HYD_string_stash stash;
 
258
    char *ns, *ns_host, *ns_port_str;
 
259
    int ns_port, ns_fd;
254
260
    HYD_status status = HYD_SUCCESS;
255
261
 
256
262
    HYDU_FUNC_ENTER();
286
292
        status = HYDU_sock_connect(ns_host, (uint16_t) ns_port, &ns_fd, 0, HYD_CONNECT_DELAY);
287
293
        HYDU_ERR_POP(status, "error connecting to the nameserver\n");
288
294
 
289
 
        i = 0;
290
 
        tmp[i++] = HYDU_strdup("LOOKUP");
291
 
        tmp[i++] = HYDU_strdup(name);
292
 
        tmp[i++] = NULL;
 
295
        HYD_STRING_STASH_INIT(stash);
 
296
        HYD_STRING_STASH(stash, HYDU_strdup("LOOKUP"), status);
 
297
        HYD_STRING_STASH(stash, HYDU_strdup(name), status);
293
298
 
294
 
        status = HYDU_send_strlist(ns_fd, tmp);
 
299
        status = HYDU_send_strlist(ns_fd, stash.strlist);
295
300
        HYDU_ERR_POP(status, "error sending string list\n");
 
301
        HYD_STRING_STASH_FREE(stash);
296
302
 
297
 
        status = HYDU_sock_read(ns_fd, &len, sizeof(int), &recvd, &closed,
298
 
                                HYDU_SOCK_COMM_MSGWAIT);
 
303
        status = HYDU_sock_read(ns_fd, &len, sizeof(int), &recvd, &closed, HYDU_SOCK_COMM_MSGWAIT);
299
304
        HYDU_ERR_POP(status, "error reading from nameserver\n");
300
305
        HYDU_ASSERT(!closed, status);
301
306