Remove easy handles before curl_multi_cleanup
[hiphop-php.git] / hphp / runtime / ext / curl / curl-multi-resource.h
blob58de2f1c7076446d470da705c82601f9c6cab97b
1 #pragma once
3 #include "hphp/runtime/ext/extension.h"
5 #include "hphp/util/compact-vector.h"
6 #include "hphp/util/type-scan.h"
8 #include <curl/curl.h>
10 namespace HPHP {
11 /////////////////////////////////////////////////////////////////////////////
12 // CurlMultiResource
14 struct CurlResource;
16 struct CurlMultiResource : SweepableResourceData {
17 using EasyHandles = CompactVector<req::ptr<CurlResource>>;
19 DECLARE_RESOURCE_ALLOCATION(CurlMultiResource)
20 CLASSNAME_IS("curl_multi")
21 const String& o_getClassNameHook() const override { return classnameof(); }
22 bool isInvalid() const override { return !m_multi; }
24 CurlMultiResource();
25 ~CurlMultiResource() { close(); }
26 void close();
28 bool setOption(int option, const Variant& value);
29 const EasyHandles& getEasyHandles() const { return m_easyh; }
31 CURLMcode add(CurlResource* curle);
32 CURLMcode remove(CurlResource* curle, bool leak = false);
33 Resource find(CURL *cp);
35 CURLM* get();
36 void check_exceptions();
38 void setInExec(bool b);
39 bool anyInExec() const;
41 private:
42 void removeEasyHandles(bool leak = false);
44 CURLM *m_multi;
45 TYPE_SCAN_IGNORE_FIELD(m_multi);
46 EasyHandles m_easyh;
49 /////////////////////////////////////////////////////////////////////////////