vibe.d requestHTTP in static this causes infinite loop?

Vijay Nayar madric at gmail.com
Thu May 19 23:44:39 UTC 2022


I've encountered an unusual behavior that I have no good 
explanation for. Consider the following code example:

```d
import vibe.core.log : logInfo;
import vibe.http.client : requestHTTP, HTTPClientRequest, 
HTTPClientResponse;
import vibe.http.common : HTTPMethod;
import vibe.stream.operations : readAllUTF8;

void doThing() {
   requestHTTP("http://example.com/",
       (scope HTTPClientRequest req) {
         logInfo("Setting request method.");
         req.method = HTTPMethod.GET;
       },
       (scope HTTPClientResponse res) {
         logInfo("Log point 1");
         string data = res.bodyReader.readAllUTF8();
         logInfo("Log point 2: %s", data);
       });
}

static this() {
   logInfo("--- static this() ---");
   doThing();
}

void main(string[] args) {
   logInfo("--- main() ---");
   doThing();
}
```

The output of this program is actually an infinite loop with 
output of the form:
```
[Eventcore DNS Lookup(----) INF] --- static this() ---
[Eventcore DNS Lookup(----) INF] --- static this() ---
```

If I remove the call from `static this()`, then the web call 
works as normal. Any idea why calling vibe.d's `requestHTTP` 
function inside of a module's static construction would cause an 
infinite loop?


More information about the Digitalmars-d-learn mailing list