---
libteam/ifinfo.c | 57 +++++++++++++++++++++++++++++++++++++++-----------------
1 file changed, 40 insertions(+), 17 deletions(-)
diff --git a/libteam/ifinfo.c b/libteam/ifinfo.c
index 47b342c..9754ffa 100644
--- a/libteam/ifinfo.c
+++ b/libteam/ifinfo.c
@@ -367,23 +367,46 @@ int get_ifinfo_list(struct team_handle *th)
};
int ret;
- ret = nl_send_simple(th->nl_cli.sock, RTM_GETLINK, NLM_F_DUMP,
- &rt_hdr, sizeof(rt_hdr));
- if (ret < 0)
- return -nl2syserr(ret);
- orig_cb = nl_socket_get_cb(th->nl_cli.sock);
- cb = nl_cb_clone(orig_cb);
- nl_cb_put(orig_cb);
- if (!cb)
- return -ENOMEM;
-
- nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, valid_handler, th);
-
- ret = nl_recvmsgs(th->nl_cli.sock, cb);
- nl_cb_put(cb);
- if (ret < 0)
- return -nl2syserr(ret);
- return check_call_change_handlers(th, TEAM_IFINFO_CHANGE);
+ int retry = 1;
+ while (retry)
+ {
+ retry = 0;
+ ret = nl_send_simple(th->nl_cli.sock, RTM_GETLINK, NLM_F_DUMP,
+ &rt_hdr, sizeof(rt_hdr));
+ if (ret < 0)
+ {
+ err(th, "get_ifinfo_list: nl_send_simple failed: ret = %d", ret);
+ return -nl2syserr(ret);
+ }
+ orig_cb = nl_socket_get_cb(th->nl_cli.sock);
+ cb = nl_cb_clone(orig_cb);
+ nl_cb_put(orig_cb);
+ if (!cb)
+ {
+ err(th, "get_ifinfo_list: nl_cb_clone failed");
+ return -ENOMEM;
+ }
+
+ nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, valid_handler, th);
+
+ ret = nl_recvmsgs(th->nl_cli.sock, cb);
+ nl_cb_put(cb);
+ if (ret < 0)
+ {
+ err(th, "get_ifinfo_list: nl_recvmsgs failed: ret = %d", ret);
+ if (ret != -NLE_DUMP_INTR)
+ {
+ return -nl2syserr(ret);
+ }
+ retry = 1;
+ }
+ }
+ ret = check_call_change_handlers(th, TEAM_IFINFO_CHANGE);
+ if (ret < 0)
+ {
+ err(th, "get_ifinfo_list: check_call_change_handers failed: ret = %d", ret);
+ }
+ return ret;
}
int ifinfo_list_init(struct team_handle *th)
--
1.8.3.1
Show replies by date
Chris, you are kidding, right?
Please take 5 minutes and think about what is wrong with this
submission. Next time, please do it before you send a patch.
Thanks!
Jiri
Wed, Nov 25, 2015 at 02:56:18PM CET, ctcard(a)hotmail.com wrote:
>---
> libteam/ifinfo.c | 57 +++++++++++++++++++++++++++++++++++++++-----------------
> 1 file changed, 40 insertions(+), 17 deletions(-)
>
>diff --git a/libteam/ifinfo.c b/libteam/ifinfo.c
>index 47b342c..9754ffa 100644
>--- a/libteam/ifinfo.c
>+++ b/libteam/ifinfo.c
>@@ -367,23 +367,46 @@ int get_ifinfo_list(struct team_handle *th)
> };
> int ret;
>
>- ret = nl_send_simple(th->nl_cli.sock, RTM_GETLINK, NLM_F_DUMP,
>- &rt_hdr, sizeof(rt_hdr));
>- if (ret < 0)
>- return -nl2syserr(ret);
>- orig_cb = nl_socket_get_cb(th->nl_cli.sock);
>- cb = nl_cb_clone(orig_cb);
>- nl_cb_put(orig_cb);
>- if (!cb)
>- return -ENOMEM;
>-
>- nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, valid_handler, th);
>-
>- ret = nl_recvmsgs(th->nl_cli.sock, cb);
>- nl_cb_put(cb);
>- if (ret < 0)
>- return -nl2syserr(ret);
>- return check_call_change_handlers(th, TEAM_IFINFO_CHANGE);
>+ int retry = 1;
>+ while (retry)
>+ {
>+ retry = 0;
>+ ret = nl_send_simple(th->nl_cli.sock, RTM_GETLINK, NLM_F_DUMP,
>+ &rt_hdr, sizeof(rt_hdr));
>+ if (ret < 0)
>+ {
>+ err(th, "get_ifinfo_list: nl_send_simple failed: ret = %d", ret);
>+ return -nl2syserr(ret);
>+ }
>+ orig_cb = nl_socket_get_cb(th->nl_cli.sock);
>+ cb = nl_cb_clone(orig_cb);
>+ nl_cb_put(orig_cb);
>+ if (!cb)
>+ {
>+ err(th, "get_ifinfo_list: nl_cb_clone failed");
>+ return -ENOMEM;
>+ }
>+
>+ nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, valid_handler, th);
>+
>+ ret = nl_recvmsgs(th->nl_cli.sock, cb);
>+ nl_cb_put(cb);
>+ if (ret < 0)
>+ {
>+ err(th, "get_ifinfo_list: nl_recvmsgs failed: ret = %d", ret);
>+ if (ret != -NLE_DUMP_INTR)
>+ {
>+ return -nl2syserr(ret);
>+ }
>+ retry = 1;
>+ }
>+ }
>+ ret = check_call_change_handlers(th, TEAM_IFINFO_CHANGE);
>+ if (ret < 0)
>+ {
>+ err(th, "get_ifinfo_list: check_call_change_handers failed: ret = %d",
ret);
>+ }
>+ return ret;
> }
>
> int ifinfo_list_init(struct team_handle *th)
>--
>1.8.3.1
>_______________________________________________
>libteam mailing list
>libteam(a)lists.fedorahosted.org
>https://lists.fedorahosted.org/admin/lists/libteam@lists.fedorahosted.org