nat_pmp: fix timeout if we passed the current deadline

getnatpmprequesttimeout can return a negative timeout if we passed
the current deadline. This can cause poll to wait forever and
can cause a deadlock if no data arrives.

git.jami.net/savoirfairelinux/jami-daemon/-/issues/991

Change-Id: Ie8b30f0dfb24022fe6f2d9e996dc099143b5387a
diff --git a/src/upnp/protocol/natpmp/nat_pmp.cpp b/src/upnp/protocol/natpmp/nat_pmp.cpp
index 77a3f4e..9d306bf 100644
--- a/src/upnp/protocol/natpmp/nat_pmp.cpp
+++ b/src/upnp/protocol/natpmp/nat_pmp.cpp
@@ -350,8 +350,11 @@
         fds.fd = handle.s;
         fds.events = POLLIN;
         struct timeval timeout;
-        getnatpmprequesttimeout(&handle, &timeout);
-        uint64_t millis = (timeout.tv_sec * (uint64_t)1000) + (timeout.tv_usec / 1000);
+        err = getnatpmprequesttimeout(&handle, &timeout);
+        int millis = (timeout.tv_sec * 1000) + (timeout.tv_usec / 1000);
+        // Note, getnatpmprequesttimeout can be negative if previous deadline is passed.
+        if (err != 0 || millis < 0)
+            millis = 50;
 
         // Wait for data.
         if (_poll(&fds, 1, millis) == -1) {