libcouchbase 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.gitmodules +3 -0
- data/.rspec +1 -0
- data/.travis.yml +35 -0
- data/Gemfile +4 -0
- data/LICENSE +24 -0
- data/README.md +389 -0
- data/Rakefile +75 -0
- data/ext/README.md +6 -0
- data/ext/Rakefile +20 -0
- data/ext/libcouchbase/.gitignore +130 -0
- data/ext/libcouchbase/.travis.yml +19 -0
- data/ext/libcouchbase/CMakeLists.txt +429 -0
- data/ext/libcouchbase/CONTRIBUTING.md +124 -0
- data/ext/libcouchbase/LICENSE +202 -0
- data/ext/libcouchbase/README.markdown +163 -0
- data/ext/libcouchbase/RELEASE_NOTES.markdown +2691 -0
- data/ext/libcouchbase/cmake/Modules/ConfigureDtrace.cmake +27 -0
- data/ext/libcouchbase/cmake/Modules/CopyPDB.cmake +42 -0
- data/ext/libcouchbase/cmake/Modules/DistScript.cmake +17 -0
- data/ext/libcouchbase/cmake/Modules/DownloadLcbDep.cmake +20 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseHdrHistogram.cmake +15 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibev.cmake +73 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibevent.cmake +52 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibuv.cmake +56 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseSnappy.cmake +11 -0
- data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +29 -0
- data/ext/libcouchbase/cmake/Modules/GetLibcouchbaseFlags.cmake +133 -0
- data/ext/libcouchbase/cmake/Modules/GetPlatformCCInfo.cmake +45 -0
- data/ext/libcouchbase/cmake/Modules/GetVersionInfo.cmake +70 -0
- data/ext/libcouchbase/cmake/config-cmake.h.in +60 -0
- data/ext/libcouchbase/cmake/configure +357 -0
- data/ext/libcouchbase/cmake/defs.mk.in +8 -0
- data/ext/libcouchbase/cmake/dtrace-instr-link.pl +38 -0
- data/ext/libcouchbase/cmake/source_files.cmake +73 -0
- data/ext/libcouchbase/configure.pl +1 -0
- data/ext/libcouchbase/contrib/cJSON/cJSON.c +624 -0
- data/ext/libcouchbase/contrib/cJSON/cJSON.h +158 -0
- data/ext/libcouchbase/contrib/cbsasl/CMakeLists.txt +9 -0
- data/ext/libcouchbase/contrib/cbsasl/COPYING +202 -0
- data/ext/libcouchbase/contrib/cbsasl/include/cbsasl/cbsasl.h +217 -0
- data/ext/libcouchbase/contrib/cbsasl/src/client.c +205 -0
- data/ext/libcouchbase/contrib/cbsasl/src/common.c +46 -0
- data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.c +67 -0
- data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.h +33 -0
- data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.c +296 -0
- data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.h +45 -0
- data/ext/libcouchbase/contrib/cbsasl/src/hash.c +573 -0
- data/ext/libcouchbase/contrib/cbsasl/src/hash.h +15 -0
- data/ext/libcouchbase/contrib/cbsasl/src/util.h +31 -0
- data/ext/libcouchbase/contrib/cliopts/CMakeLists.txt +2 -0
- data/ext/libcouchbase/contrib/cliopts/cliopts.c +747 -0
- data/ext/libcouchbase/contrib/cliopts/cliopts.h +493 -0
- data/ext/libcouchbase/contrib/genhash/genhash.c +372 -0
- data/ext/libcouchbase/contrib/genhash/genhash.h +235 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/CHANGES +157 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/CMakeLists.txt +252 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/CONTRIBUTORS +37 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/LICENSE +28 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/MINIFY.sh +15 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/README +435 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/cmake/internal_utils.cmake +227 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-death-test.h +294 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-message.h +250 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h +1421 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h.pump +487 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-printers.h +855 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-spi.h +232 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-test-part.h +179 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-typed-test.h +259 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest.h +2291 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_pred_impl.h +358 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_prod.h +58 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-death-test-internal.h +319 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-filepath.h +206 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-internal.h +1158 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-linked_ptr.h +233 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h +5143 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h.pump +301 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util.h +619 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-port.h +1947 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-string.h +167 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h +1012 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h.pump +339 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h +3331 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h.pump +297 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-all.cc +48 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-death-test.cc +1344 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-filepath.cc +382 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-internal-inl.h +1218 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-port.cc +805 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-printers.cc +363 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-test-part.cc +110 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-typed-test.cc +110 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest.cc +5015 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest_main.cc +38 -0
- data/ext/libcouchbase/contrib/http_parser/LICENSE-MIT +23 -0
- data/ext/libcouchbase/contrib/http_parser/README.md +178 -0
- data/ext/libcouchbase/contrib/http_parser/http_parser.c +2060 -0
- data/ext/libcouchbase/contrib/http_parser/http_parser.h +321 -0
- data/ext/libcouchbase/contrib/jsonsl/LICENSE +20 -0
- data/ext/libcouchbase/contrib/jsonsl/jsonsl.c +1452 -0
- data/ext/libcouchbase/contrib/jsonsl/jsonsl.h +971 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/CMakeLists.txt +6 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/LICENSE +55 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp-forwards.h +255 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.cpp +4892 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.h +1961 -0
- data/ext/libcouchbase/contrib/snappy/CMakeLists.txt +8 -0
- data/ext/libcouchbase/contrib/snappy/COPYING +28 -0
- data/ext/libcouchbase/contrib/snappy/snappy-c.cc +90 -0
- data/ext/libcouchbase/contrib/snappy/snappy-c.h +138 -0
- data/ext/libcouchbase/contrib/snappy/snappy-internal.h +150 -0
- data/ext/libcouchbase/contrib/snappy/snappy-lcb-msvc.h +5 -0
- data/ext/libcouchbase/contrib/snappy/snappy-sinksource.cc +71 -0
- data/ext/libcouchbase/contrib/snappy/snappy-sinksource.h +137 -0
- data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.cc +42 -0
- data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.h +491 -0
- data/ext/libcouchbase/contrib/snappy/snappy-stubs-public.h +98 -0
- data/ext/libcouchbase/contrib/snappy/snappy.cc +1307 -0
- data/ext/libcouchbase/contrib/snappy/snappy.h +184 -0
- data/ext/libcouchbase/contrib/win32-defs/iocpdefs.h +133 -0
- data/ext/libcouchbase/contrib/win32-defs/mingwdefs.h +4396 -0
- data/ext/libcouchbase/contrib/win32-defs/win_stdint.h +258 -0
- data/ext/libcouchbase/example/CMakeLists.txt +37 -0
- data/ext/libcouchbase/example/README.markdown +47 -0
- data/ext/libcouchbase/example/db/db.c +167 -0
- data/ext/libcouchbase/example/db/vb.c +227 -0
- data/ext/libcouchbase/example/instancepool/main.cc +102 -0
- data/ext/libcouchbase/example/instancepool/pool.cc +102 -0
- data/ext/libcouchbase/example/instancepool/pool.h +69 -0
- data/ext/libcouchbase/example/libeventdirect/main.c +148 -0
- data/ext/libcouchbase/example/mcc/mcc.cc +246 -0
- data/ext/libcouchbase/example/minimal/minimal.c +130 -0
- data/ext/libcouchbase/example/observe/observe.c +146 -0
- data/ext/libcouchbase/example/subdoc/subdoc-multi.cc +132 -0
- data/ext/libcouchbase/example/subdoc/subdoc-simple.cc +191 -0
- data/ext/libcouchbase/example/tick/tick.c +119 -0
- data/ext/libcouchbase/example/views/views-example.cc +83 -0
- data/ext/libcouchbase/include/libcouchbase/_cxxwrap.h +150 -0
- data/ext/libcouchbase/include/libcouchbase/api-legacy.h +1689 -0
- data/ext/libcouchbase/include/libcouchbase/api3.h +2 -0
- data/ext/libcouchbase/include/libcouchbase/assert.h +44 -0
- data/ext/libcouchbase/include/libcouchbase/cbft.h +109 -0
- data/ext/libcouchbase/include/libcouchbase/cntl-private.h +356 -0
- data/ext/libcouchbase/include/libcouchbase/cntl.h +937 -0
- data/ext/libcouchbase/include/libcouchbase/configuration.h.in +23 -0
- data/ext/libcouchbase/include/libcouchbase/couchbase.h +3677 -0
- data/ext/libcouchbase/include/libcouchbase/deprecated.h +300 -0
- data/ext/libcouchbase/include/libcouchbase/error.h +595 -0
- data/ext/libcouchbase/include/libcouchbase/http.h +1 -0
- data/ext/libcouchbase/include/libcouchbase/iops.h +1050 -0
- data/ext/libcouchbase/include/libcouchbase/ixmgmt.h +263 -0
- data/ext/libcouchbase/include/libcouchbase/kvbuf.h +132 -0
- data/ext/libcouchbase/include/libcouchbase/n1ql.h +364 -0
- data/ext/libcouchbase/include/libcouchbase/pktfwd.h +270 -0
- data/ext/libcouchbase/include/libcouchbase/plugins/io/bsdio-inl.c +367 -0
- data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr-inl.c +76 -0
- data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr.h +199 -0
- data/ext/libcouchbase/include/libcouchbase/subdoc.h +312 -0
- data/ext/libcouchbase/include/libcouchbase/sysdefs.h +98 -0
- data/ext/libcouchbase/include/libcouchbase/vbucket.h +643 -0
- data/ext/libcouchbase/include/libcouchbase/views.h +298 -0
- data/ext/libcouchbase/include/libcouchbase/visibility.h +65 -0
- data/ext/libcouchbase/include/memcached/COPYING +30 -0
- data/ext/libcouchbase/include/memcached/README +10 -0
- data/ext/libcouchbase/include/memcached/protocol_binary.h +1916 -0
- data/ext/libcouchbase/include/memcached/vbucket.h +42 -0
- data/ext/libcouchbase/packaging/README +7 -0
- data/ext/libcouchbase/packaging/abicheck/.gitignore +4 -0
- data/ext/libcouchbase/packaging/abicheck/Makefile +17 -0
- data/ext/libcouchbase/packaging/abicheck/README.md +27 -0
- data/ext/libcouchbase/packaging/abicheck/template.xml +3 -0
- data/ext/libcouchbase/packaging/deb/compat +1 -0
- data/ext/libcouchbase/packaging/deb/control +73 -0
- data/ext/libcouchbase/packaging/deb/copyright +10 -0
- data/ext/libcouchbase/packaging/deb/libcouchbase-dev.docs +3 -0
- data/ext/libcouchbase/packaging/deb/package.mk +31 -0
- data/ext/libcouchbase/packaging/deb/rules +46 -0
- data/ext/libcouchbase/packaging/deb/source/format +1 -0
- data/ext/libcouchbase/packaging/distinfo/README +1 -0
- data/ext/libcouchbase/packaging/distinfo/distinfo.cmake.in +4 -0
- data/ext/libcouchbase/packaging/dllversion.rc.in +39 -0
- data/ext/libcouchbase/packaging/libcouchbase.pc.in +10 -0
- data/ext/libcouchbase/packaging/nuget/libcouchbase.autopkg +76 -0
- data/ext/libcouchbase/packaging/parse-git-describe.pl +166 -0
- data/ext/libcouchbase/packaging/rpm/libcouchbase.spec.in +108 -0
- data/ext/libcouchbase/packaging/rpm/package.mk +40 -0
- data/ext/libcouchbase/plugins/io/iocp/CMakeLists.txt +9 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_iops.c +466 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_iops.h +217 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_loop.c +295 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_timer.c +79 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_util.c +229 -0
- data/ext/libcouchbase/plugins/io/libev/CMakeLists.txt +29 -0
- data/ext/libcouchbase/plugins/io/libev/libev_io_opts.h +65 -0
- data/ext/libcouchbase/plugins/io/libev/plugin-libev.c +289 -0
- data/ext/libcouchbase/plugins/io/libevent/CMakeLists.txt +29 -0
- data/ext/libcouchbase/plugins/io/libevent/libevent_io_opts.h +67 -0
- data/ext/libcouchbase/plugins/io/libevent/plugin-libevent.c +292 -0
- data/ext/libcouchbase/plugins/io/libuv/CMakeLists.txt +42 -0
- data/ext/libcouchbase/plugins/io/libuv/libuv_compat.h +212 -0
- data/ext/libcouchbase/plugins/io/libuv/libuv_io_opts.h +118 -0
- data/ext/libcouchbase/plugins/io/libuv/plugin-internal.h +148 -0
- data/ext/libcouchbase/plugins/io/libuv/plugin-libuv.c +648 -0
- data/ext/libcouchbase/plugins/io/select/CMakeLists.txt +11 -0
- data/ext/libcouchbase/plugins/io/select/plugin-select.c +448 -0
- data/ext/libcouchbase/plugins/io/select/select_io_opts.h +39 -0
- data/ext/libcouchbase/src/README.md +103 -0
- data/ext/libcouchbase/src/aspend.h +106 -0
- data/ext/libcouchbase/src/auth.cc +74 -0
- data/ext/libcouchbase/src/auth.h +54 -0
- data/ext/libcouchbase/src/bootstrap.c +269 -0
- data/ext/libcouchbase/src/bootstrap.h +129 -0
- data/ext/libcouchbase/src/bucketconfig/bc_cccp.c +495 -0
- data/ext/libcouchbase/src/bucketconfig/bc_file.c +347 -0
- data/ext/libcouchbase/src/bucketconfig/bc_http.c +630 -0
- data/ext/libcouchbase/src/bucketconfig/bc_http.h +82 -0
- data/ext/libcouchbase/src/bucketconfig/bc_mcraw.c +150 -0
- data/ext/libcouchbase/src/bucketconfig/clconfig.h +681 -0
- data/ext/libcouchbase/src/bucketconfig/confmon.c +474 -0
- data/ext/libcouchbase/src/callbacks.c +378 -0
- data/ext/libcouchbase/src/cbft.cc +210 -0
- data/ext/libcouchbase/src/cntl.cc +847 -0
- data/ext/libcouchbase/src/config_static.h +159 -0
- data/ext/libcouchbase/src/connspec.cc +462 -0
- data/ext/libcouchbase/src/connspec.h +105 -0
- data/ext/libcouchbase/src/ctx-log-inl.h +27 -0
- data/ext/libcouchbase/src/dump.c +98 -0
- data/ext/libcouchbase/src/getconfig.c +100 -0
- data/ext/libcouchbase/src/gethrtime.c +109 -0
- data/ext/libcouchbase/src/handler.c +922 -0
- data/ext/libcouchbase/src/hashset.c +164 -0
- data/ext/libcouchbase/src/hashset.h +86 -0
- data/ext/libcouchbase/src/hashtable.c +75 -0
- data/ext/libcouchbase/src/hdr_timings.c +92 -0
- data/ext/libcouchbase/src/hostlist.cc +301 -0
- data/ext/libcouchbase/src/hostlist.h +171 -0
- data/ext/libcouchbase/src/http/http-priv.h +307 -0
- data/ext/libcouchbase/src/http/http.cc +633 -0
- data/ext/libcouchbase/src/http/http.h +34 -0
- data/ext/libcouchbase/src/http/http_io.cc +307 -0
- data/ext/libcouchbase/src/instance.cc +722 -0
- data/ext/libcouchbase/src/internal.h +244 -0
- data/ext/libcouchbase/src/iofactory.c +575 -0
- data/ext/libcouchbase/src/jsparse/parser.cc +519 -0
- data/ext/libcouchbase/src/jsparse/parser.h +173 -0
- data/ext/libcouchbase/src/lcbht/lcbht.c +282 -0
- data/ext/libcouchbase/src/lcbht/lcbht.h +199 -0
- data/ext/libcouchbase/src/lcbio/connect.c +557 -0
- data/ext/libcouchbase/src/lcbio/connect.h +364 -0
- data/ext/libcouchbase/src/lcbio/ctx.c +611 -0
- data/ext/libcouchbase/src/lcbio/ctx.h +405 -0
- data/ext/libcouchbase/src/lcbio/iotable.c +290 -0
- data/ext/libcouchbase/src/lcbio/iotable.h +84 -0
- data/ext/libcouchbase/src/lcbio/ioutils.c +350 -0
- data/ext/libcouchbase/src/lcbio/ioutils.h +203 -0
- data/ext/libcouchbase/src/lcbio/lcbio.h +51 -0
- data/ext/libcouchbase/src/lcbio/manager.c +584 -0
- data/ext/libcouchbase/src/lcbio/manager.h +156 -0
- data/ext/libcouchbase/src/lcbio/protoctx.c +84 -0
- data/ext/libcouchbase/src/lcbio/rw-inl.h +115 -0
- data/ext/libcouchbase/src/lcbio/ssl.h +149 -0
- data/ext/libcouchbase/src/lcbio/timer-ng.h +179 -0
- data/ext/libcouchbase/src/lcbio/timer.c +132 -0
- data/ext/libcouchbase/src/legacy.c +430 -0
- data/ext/libcouchbase/src/list.c +144 -0
- data/ext/libcouchbase/src/list.h +127 -0
- data/ext/libcouchbase/src/logging.c +244 -0
- data/ext/libcouchbase/src/logging.h +86 -0
- data/ext/libcouchbase/src/mc/compress.c +90 -0
- data/ext/libcouchbase/src/mc/compress.h +61 -0
- data/ext/libcouchbase/src/mc/forward.c +186 -0
- data/ext/libcouchbase/src/mc/forward.h +90 -0
- data/ext/libcouchbase/src/mc/iovcursor-inl.h +279 -0
- data/ext/libcouchbase/src/mc/iovcursor.h +66 -0
- data/ext/libcouchbase/src/mc/mcreq-flush-inl.h +111 -0
- data/ext/libcouchbase/src/mc/mcreq.c +954 -0
- data/ext/libcouchbase/src/mc/mcreq.h +977 -0
- data/ext/libcouchbase/src/mcserver/mcserver.c +784 -0
- data/ext/libcouchbase/src/mcserver/mcserver.h +121 -0
- data/ext/libcouchbase/src/mcserver/negotiate.c +656 -0
- data/ext/libcouchbase/src/mcserver/negotiate.h +119 -0
- data/ext/libcouchbase/src/n1ql/ixmgmt.cc +860 -0
- data/ext/libcouchbase/src/n1ql/n1ql-internal.h +22 -0
- data/ext/libcouchbase/src/n1ql/n1ql.cc +729 -0
- data/ext/libcouchbase/src/n1ql/params.cc +215 -0
- data/ext/libcouchbase/src/netbuf/netbuf-defs.h +89 -0
- data/ext/libcouchbase/src/netbuf/netbuf-mblock.h +235 -0
- data/ext/libcouchbase/src/netbuf/netbuf.c +929 -0
- data/ext/libcouchbase/src/netbuf/netbuf.h +452 -0
- data/ext/libcouchbase/src/newconfig.c +385 -0
- data/ext/libcouchbase/src/nodeinfo.cc +194 -0
- data/ext/libcouchbase/src/operations/cbflush.c +71 -0
- data/ext/libcouchbase/src/operations/counter.c +116 -0
- data/ext/libcouchbase/src/operations/durability-cas.c +224 -0
- data/ext/libcouchbase/src/operations/durability-seqno.c +157 -0
- data/ext/libcouchbase/src/operations/durability.c +668 -0
- data/ext/libcouchbase/src/operations/durability_internal.h +199 -0
- data/ext/libcouchbase/src/operations/get.c +409 -0
- data/ext/libcouchbase/src/operations/observe-seqno.c +96 -0
- data/ext/libcouchbase/src/operations/observe.c +340 -0
- data/ext/libcouchbase/src/operations/pktfwd.c +86 -0
- data/ext/libcouchbase/src/operations/remove.c +83 -0
- data/ext/libcouchbase/src/operations/stats.c +461 -0
- data/ext/libcouchbase/src/operations/store.c +360 -0
- data/ext/libcouchbase/src/operations/subdoc.cc +510 -0
- data/ext/libcouchbase/src/operations/touch.c +81 -0
- data/ext/libcouchbase/src/packetutils.c +60 -0
- data/ext/libcouchbase/src/packetutils.h +147 -0
- data/ext/libcouchbase/src/probes.d +211 -0
- data/ext/libcouchbase/src/rdb/bigalloc.c +225 -0
- data/ext/libcouchbase/src/rdb/bigalloc.h +73 -0
- data/ext/libcouchbase/src/rdb/chunkalloc.c +174 -0
- data/ext/libcouchbase/src/rdb/libcalloc.c +94 -0
- data/ext/libcouchbase/src/rdb/rope.c +419 -0
- data/ext/libcouchbase/src/rdb/rope.h +488 -0
- data/ext/libcouchbase/src/retrychk.c +113 -0
- data/ext/libcouchbase/src/retryq.c +424 -0
- data/ext/libcouchbase/src/retryq.h +157 -0
- data/ext/libcouchbase/src/ringbuffer.c +442 -0
- data/ext/libcouchbase/src/ringbuffer.h +100 -0
- data/ext/libcouchbase/src/settings.c +95 -0
- data/ext/libcouchbase/src/settings.h +188 -0
- data/ext/libcouchbase/src/simplestring.c +211 -0
- data/ext/libcouchbase/src/simplestring.h +228 -0
- data/ext/libcouchbase/src/sllist-inl.h +197 -0
- data/ext/libcouchbase/src/sllist.h +76 -0
- data/ext/libcouchbase/src/ssl/CMakeLists.txt +23 -0
- data/ext/libcouchbase/src/ssl/ssl_c.c +415 -0
- data/ext/libcouchbase/src/ssl/ssl_common.c +454 -0
- data/ext/libcouchbase/src/ssl/ssl_e.c +408 -0
- data/ext/libcouchbase/src/ssl/ssl_iot_common.h +180 -0
- data/ext/libcouchbase/src/ssobuf.h +82 -0
- data/ext/libcouchbase/src/strcodecs/base64.c +123 -0
- data/ext/libcouchbase/src/strcodecs/strcodecs.h +285 -0
- data/ext/libcouchbase/src/timings.c +208 -0
- data/ext/libcouchbase/src/trace.h +105 -0
- data/ext/libcouchbase/src/utilities.c +171 -0
- data/ext/libcouchbase/src/vbucket/CMakeLists.txt +2 -0
- data/ext/libcouchbase/src/vbucket/aliases.h +35 -0
- data/ext/libcouchbase/src/vbucket/crc32.h +83 -0
- data/ext/libcouchbase/src/vbucket/hash.h +30 -0
- data/ext/libcouchbase/src/vbucket/json-inl.h +112 -0
- data/ext/libcouchbase/src/vbucket/ketama.c +66 -0
- data/ext/libcouchbase/src/vbucket/rfc1321/global.h +32 -0
- data/ext/libcouchbase/src/vbucket/rfc1321/md5.h +35 -0
- data/ext/libcouchbase/src/vbucket/rfc1321/md5c-inl.h +335 -0
- data/ext/libcouchbase/src/vbucket/vbucket.c +1543 -0
- data/ext/libcouchbase/src/views/docreq.c +194 -0
- data/ext/libcouchbase/src/views/docreq.h +83 -0
- data/ext/libcouchbase/src/views/viewreq.c +358 -0
- data/ext/libcouchbase/src/views/viewreq.h +36 -0
- data/ext/libcouchbase/src/wait.c +161 -0
- data/ext/libcouchbase/tests/CMakeLists.txt +140 -0
- data/ext/libcouchbase/tests/basic/t_base64.cc +81 -0
- data/ext/libcouchbase/tests/basic/t_ccbc103.cc +95 -0
- data/ext/libcouchbase/tests/basic/t_connstr.cc +404 -0
- data/ext/libcouchbase/tests/basic/t_creds.cc +32 -0
- data/ext/libcouchbase/tests/basic/t_ctlcodes.cc +92 -0
- data/ext/libcouchbase/tests/basic/t_hashset.cc +262 -0
- data/ext/libcouchbase/tests/basic/t_host.cc +198 -0
- data/ext/libcouchbase/tests/basic/t_jsparse.cc +137 -0
- data/ext/libcouchbase/tests/basic/t_jsparse.h +589 -0
- data/ext/libcouchbase/tests/basic/t_list.cc +155 -0
- data/ext/libcouchbase/tests/basic/t_logger.cc +65 -0
- data/ext/libcouchbase/tests/basic/t_misc.cc +24 -0
- data/ext/libcouchbase/tests/basic/t_n1qlstrings.cc +18 -0
- data/ext/libcouchbase/tests/basic/t_netbuf.cc +446 -0
- data/ext/libcouchbase/tests/basic/t_packet.cc +222 -0
- data/ext/libcouchbase/tests/basic/t_ringbuffer.cc +278 -0
- data/ext/libcouchbase/tests/basic/t_slist.cc +429 -0
- data/ext/libcouchbase/tests/basic/t_strerror.cc +64 -0
- data/ext/libcouchbase/tests/basic/t_string.cc +112 -0
- data/ext/libcouchbase/tests/basic/t_urlencode.cc +132 -0
- data/ext/libcouchbase/tests/check-all.cc +608 -0
- data/ext/libcouchbase/tests/htparse/t_basic.cc +193 -0
- data/ext/libcouchbase/tests/ioserver/connection.cc +166 -0
- data/ext/libcouchbase/tests/ioserver/future.cc +50 -0
- data/ext/libcouchbase/tests/ioserver/ioserver.cc +104 -0
- data/ext/libcouchbase/tests/ioserver/ioserver.h +478 -0
- data/ext/libcouchbase/tests/ioserver/socket.cc +88 -0
- data/ext/libcouchbase/tests/ioserver/ssl_connection.cc +145 -0
- data/ext/libcouchbase/tests/ioserver/threads-pthreads.cc +119 -0
- data/ext/libcouchbase/tests/ioserver/threads-win32.cc +117 -0
- data/ext/libcouchbase/tests/ioserver/threads.h +66 -0
- data/ext/libcouchbase/tests/iotests/iotests.h +15 -0
- data/ext/libcouchbase/tests/iotests/mock-environment.cc +524 -0
- data/ext/libcouchbase/tests/iotests/mock-environment.h +385 -0
- data/ext/libcouchbase/tests/iotests/mock-unit-test.cc +67 -0
- data/ext/libcouchbase/tests/iotests/mock-unit-test.h +61 -0
- data/ext/libcouchbase/tests/iotests/serverparams.h +76 -0
- data/ext/libcouchbase/tests/iotests/t_arithmetic.cc +143 -0
- data/ext/libcouchbase/tests/iotests/t_behavior.cc +226 -0
- data/ext/libcouchbase/tests/iotests/t_configcache.cc +117 -0
- data/ext/libcouchbase/tests/iotests/t_confmon.cc +241 -0
- data/ext/libcouchbase/tests/iotests/t_durability.cc +1059 -0
- data/ext/libcouchbase/tests/iotests/t_forward.cc +110 -0
- data/ext/libcouchbase/tests/iotests/t_get.cc +512 -0
- data/ext/libcouchbase/tests/iotests/t_http.cc +438 -0
- data/ext/libcouchbase/tests/iotests/t_iops.cc +175 -0
- data/ext/libcouchbase/tests/iotests/t_lock.cc +275 -0
- data/ext/libcouchbase/tests/iotests/t_misc.cc +713 -0
- data/ext/libcouchbase/tests/iotests/t_mutate.cc +609 -0
- data/ext/libcouchbase/tests/iotests/t_n1ql.cc +270 -0
- data/ext/libcouchbase/tests/iotests/t_netfail.cc +654 -0
- data/ext/libcouchbase/tests/iotests/t_obseqno.cc +157 -0
- data/ext/libcouchbase/tests/iotests/t_regression.cc +321 -0
- data/ext/libcouchbase/tests/iotests/t_sched.cc +88 -0
- data/ext/libcouchbase/tests/iotests/t_serverops.cc +230 -0
- data/ext/libcouchbase/tests/iotests/t_smoke.cc +528 -0
- data/ext/libcouchbase/tests/iotests/t_subdoc.cc +822 -0
- data/ext/libcouchbase/tests/iotests/t_syncmode.cc +64 -0
- data/ext/libcouchbase/tests/iotests/t_views.cc +405 -0
- data/ext/libcouchbase/tests/iotests/testutil.cc +250 -0
- data/ext/libcouchbase/tests/iotests/testutil.h +163 -0
- data/ext/libcouchbase/tests/mc/mctest.h +119 -0
- data/ext/libcouchbase/tests/mc/pktmaker.h +101 -0
- data/ext/libcouchbase/tests/mc/t_alloc.cc +269 -0
- data/ext/libcouchbase/tests/mc/t_context.cc +100 -0
- data/ext/libcouchbase/tests/mc/t_flush.cc +185 -0
- data/ext/libcouchbase/tests/mc/t_forward.cc +239 -0
- data/ext/libcouchbase/tests/mc/t_ioflush.cc +102 -0
- data/ext/libcouchbase/tests/mc/t_iovcursor.cc +173 -0
- data/ext/libcouchbase/tests/mocksupport/procutil.c +305 -0
- data/ext/libcouchbase/tests/mocksupport/procutil.h +89 -0
- data/ext/libcouchbase/tests/mocksupport/server.c +391 -0
- data/ext/libcouchbase/tests/mocksupport/server.h +72 -0
- data/ext/libcouchbase/tests/mocksupport/timeout.c +69 -0
- data/ext/libcouchbase/tests/nonio_tests.cc +23 -0
- data/ext/libcouchbase/tests/rdb/rdbtest.h +133 -0
- data/ext/libcouchbase/tests/rdb/t_basic.cc +128 -0
- data/ext/libcouchbase/tests/rdb/t_bigalloc.cc +93 -0
- data/ext/libcouchbase/tests/rdb/t_refs.cc +112 -0
- data/ext/libcouchbase/tests/socktests/socktest.cc +347 -0
- data/ext/libcouchbase/tests/socktests/socktest.h +448 -0
- data/ext/libcouchbase/tests/socktests/t_basic.cc +143 -0
- data/ext/libcouchbase/tests/socktests/t_ctx.cc +73 -0
- data/ext/libcouchbase/tests/socktests/t_manager.cc +179 -0
- data/ext/libcouchbase/tests/socktests/t_putex.cc +256 -0
- data/ext/libcouchbase/tests/socktests/t_read.cc +187 -0
- data/ext/libcouchbase/tests/socktests/t_reentrant.cc +143 -0
- data/ext/libcouchbase/tests/socktests/t_ssl.cc +80 -0
- data/ext/libcouchbase/tests/socktests/t_write.cc +95 -0
- data/ext/libcouchbase/tests/start_mock.bat +15 -0
- data/ext/libcouchbase/tests/start_mock.sh +42 -0
- data/ext/libcouchbase/tests/unit_tests.cc +43 -0
- data/ext/libcouchbase/tests/vbucket/confdata/bad.json +101 -0
- data/ext/libcouchbase/tests/vbucket/confdata/full_25.json +363 -0
- data/ext/libcouchbase/tests/vbucket/confdata/memd_25.json +90 -0
- data/ext/libcouchbase/tests/vbucket/confdata/memd_30.json +1 -0
- data/ext/libcouchbase/tests/vbucket/confdata/memd_45.json +1 -0
- data/ext/libcouchbase/tests/vbucket/confdata/terse_25.json +291 -0
- data/ext/libcouchbase/tests/vbucket/confdata/terse_30.json +1 -0
- data/ext/libcouchbase/tests/vbucket/t_config.cc +341 -0
- data/ext/libcouchbase/tools/CMakeLists.txt +51 -0
- data/ext/libcouchbase/tools/cbc-handlers.h +462 -0
- data/ext/libcouchbase/tools/cbc-n1qlback.cc +439 -0
- data/ext/libcouchbase/tools/cbc-pillowfight.cc +822 -0
- data/ext/libcouchbase/tools/cbc.cc +1541 -0
- data/ext/libcouchbase/tools/common/histogram.cc +43 -0
- data/ext/libcouchbase/tools/common/histogram.h +23 -0
- data/ext/libcouchbase/tools/common/my_inttypes.h +22 -0
- data/ext/libcouchbase/tools/common/options.cc +420 -0
- data/ext/libcouchbase/tools/common/options.h +81 -0
- data/ext/libcouchbase/tools/docgen/docgen.h +469 -0
- data/ext/libcouchbase/tools/docgen/loc.h +210 -0
- data/ext/libcouchbase/tools/docgen/placeholders.h +211 -0
- data/ext/libcouchbase/tools/docgen/seqgen.h +94 -0
- data/lib/libcouchbase.rb +36 -0
- data/lib/libcouchbase/bucket.rb +819 -0
- data/lib/libcouchbase/callbacks.rb +72 -0
- data/lib/libcouchbase/connection.rb +790 -0
- data/lib/libcouchbase/design_docs.rb +86 -0
- data/lib/libcouchbase/error.rb +68 -0
- data/lib/libcouchbase/ext/libcouchbase.rb +1135 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdbase.rb +23 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdcounter.rb +36 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdendure.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdfts.rb +24 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdget.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdgetreplica.rb +49 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdhttp.rb +58 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdn1ql.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdobseqno.rb +33 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdobserve.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdstore.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdstoredur.rb +45 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdsubdoc.rb +49 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdverbosity.rb +29 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdviewquery.rb +61 -0
- data/lib/libcouchbase/ext/libcouchbase/contigbuf.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st.rb +15 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st0.rb +23 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st1.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st2.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st3.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/crst_u.rb +20 -0
- data/lib/libcouchbase/ext/libcouchbase/durability_opts_st_v.rb +11 -0
- data/lib/libcouchbase/ext/libcouchbase/durability_opts_t.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/durabilityopt_sv0.rb +63 -0
- data/lib/libcouchbase/ext/libcouchbase/enums.rb +991 -0
- data/lib/libcouchbase/ext/libcouchbase/fragbuf.rb +18 -0
- data/lib/libcouchbase/ext/libcouchbase/ftshandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/histogram.rb +34 -0
- data/lib/libcouchbase/ext/libcouchbase/http_request_t.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/keybuf.rb +20 -0
- data/lib/libcouchbase/ext/libcouchbase/multicmd_ctx.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/mutation_token.rb +17 -0
- data/lib/libcouchbase/ext/libcouchbase/n1qlhandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/n1qlparams.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/respbase.rb +29 -0
- data/lib/libcouchbase/ext/libcouchbase/respcounter.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respendure.rb +49 -0
- data/lib/libcouchbase/ext/libcouchbase/respfts.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/respget.rb +44 -0
- data/lib/libcouchbase/ext/libcouchbase/resphttp.rb +48 -0
- data/lib/libcouchbase/ext/libcouchbase/respmcversion.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respn1ql.rb +41 -0
- data/lib/libcouchbase/ext/libcouchbase/respobseqno.rb +52 -0
- data/lib/libcouchbase/ext/libcouchbase/respobserve.rb +41 -0
- data/lib/libcouchbase/ext/libcouchbase/respserverbase.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respstats.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respstore.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respstoredur.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respsubdoc.rb +35 -0
- data/lib/libcouchbase/ext/libcouchbase/respviewquery.rb +67 -0
- data/lib/libcouchbase/ext/libcouchbase/sdentry.rb +22 -0
- data/lib/libcouchbase/ext/libcouchbase/sdspec.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/t.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/valbuf.rb +22 -0
- data/lib/libcouchbase/ext/libcouchbase/valbuf_u_buf.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/viewhandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase_iocp.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase_libuv.rb +18 -0
- data/lib/libcouchbase/ext/tasks.rb +87 -0
- data/lib/libcouchbase/n1ql.rb +73 -0
- data/lib/libcouchbase/query_full_text.rb +147 -0
- data/lib/libcouchbase/query_n1ql.rb +121 -0
- data/lib/libcouchbase/query_view.rb +129 -0
- data/lib/libcouchbase/results_fiber.rb +262 -0
- data/lib/libcouchbase/results_native.rb +211 -0
- data/lib/libcouchbase/version.rb +5 -0
- data/libcouchbase.gemspec +61 -0
- data/spec/bucket_spec.rb +270 -0
- data/spec/connection_spec.rb +277 -0
- data/spec/design_docs_spec.rb +23 -0
- data/spec/error_spec.rb +26 -0
- data/spec/fts_spec.rb +129 -0
- data/spec/n1ql_spec.rb +201 -0
- data/spec/results_libuv_spec.rb +229 -0
- data/spec/results_native_spec.rb +259 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/design.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/data-0000.cbb +0 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/failover.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/meta.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/seqno.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/snapshot_markers.json +1 -0
- data/spec/view_spec.rb +195 -0
- metadata +775 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2013 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* New-Style v1 plugin for Windows, Using IOCP
|
|
20
|
+
* @author Mark Nunberg
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
#ifndef LCB_IOCP_H
|
|
24
|
+
#define LCB_IOCP_H
|
|
25
|
+
|
|
26
|
+
#include <libcouchbase/assert.h>
|
|
27
|
+
|
|
28
|
+
#define WIN32_NO_STATUS
|
|
29
|
+
#include <libcouchbase/couchbase.h>
|
|
30
|
+
#include "list.h"
|
|
31
|
+
|
|
32
|
+
#undef WIN32_NO_STATUS
|
|
33
|
+
|
|
34
|
+
#ifdef __MINGW32__
|
|
35
|
+
#include "mingwdefs.h"
|
|
36
|
+
#else
|
|
37
|
+
#include <ntstatus.h>
|
|
38
|
+
#endif
|
|
39
|
+
|
|
40
|
+
#include "iocpdefs.h"
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* These macros provide atomic operations for one-time initialization
|
|
44
|
+
* functions. They take as their parameter a 'LONG'.
|
|
45
|
+
* The initial value of the variable should be 0. If the initialization
|
|
46
|
+
* function has not run yet, it is set to 1. Subsequent functions will
|
|
47
|
+
* return 1.
|
|
48
|
+
*/
|
|
49
|
+
#define IOCP_SYNCTYPE volatile LONG
|
|
50
|
+
#define IOCP_INITONCE(syncvar) InterlockedCompareExchange(&syncvar, 1, 0) ? 0 : 1
|
|
51
|
+
|
|
52
|
+
#ifdef __cplusplus
|
|
53
|
+
extern "C" {
|
|
54
|
+
#endif
|
|
55
|
+
|
|
56
|
+
#define LCB_IOCP_VISTA_API
|
|
57
|
+
#if _WIN32_WINNT < 0x0600
|
|
58
|
+
#undef LCB_IOCP_VISTA_API
|
|
59
|
+
#endif
|
|
60
|
+
|
|
61
|
+
/** @see iocp_overlapped_t */
|
|
62
|
+
enum {
|
|
63
|
+
LCBIOCP_ACTION_NONE = 100,
|
|
64
|
+
LCBIOCP_ACTION_READ,
|
|
65
|
+
LCBIOCP_ACTION_WRITE,
|
|
66
|
+
LCBIOCP_ACTION_CONNECT
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
struct iocp_sockdata_st;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* This structure is our 'overlapped' subclass. It in itself does not
|
|
73
|
+
* contain any data, but rather determines how to read the
|
|
74
|
+
* CompletionKey passed along with GetQueuedCompletionStatus
|
|
75
|
+
* This information is determined from the ::action field */
|
|
76
|
+
typedef struct {
|
|
77
|
+
OVERLAPPED base;
|
|
78
|
+
struct iocp_sockdata_st *sd;
|
|
79
|
+
unsigned char action;
|
|
80
|
+
} iocp_overlapped_t;
|
|
81
|
+
|
|
82
|
+
typedef enum {
|
|
83
|
+
IOCP_WRITEBUF_AVAILABLE = 0,
|
|
84
|
+
IOCP_WRITEBUF_INUSE,
|
|
85
|
+
IOCP_WRITEBUF_ALLOCATED
|
|
86
|
+
} iocp_wbuf_state_t;
|
|
87
|
+
|
|
88
|
+
typedef struct {
|
|
89
|
+
iocp_overlapped_t ol_write;
|
|
90
|
+
lcb_ioC_write2_callback cb;
|
|
91
|
+
iocp_wbuf_state_t state;
|
|
92
|
+
void *uarg;
|
|
93
|
+
} iocp_write_t;
|
|
94
|
+
|
|
95
|
+
#define IOCP_WRITEOBJ_FROM_OVERLAPPED(ol) \
|
|
96
|
+
(iocp_write_t *)(((char *)ol) - offsetof(iocp_write_t, ol_write))
|
|
97
|
+
|
|
98
|
+
typedef struct iocp_sockdata_st {
|
|
99
|
+
lcb_sockdata_t sd_base;
|
|
100
|
+
/**OVERLAPPED subclass used for read operations. Since no more than one read
|
|
101
|
+
* per socket may be active at any given time, this is attached to the socket
|
|
102
|
+
* structure */
|
|
103
|
+
iocp_overlapped_t ol_read;
|
|
104
|
+
/** Write structure allocated as a single chunk */
|
|
105
|
+
iocp_write_t w_info;
|
|
106
|
+
/** Reference count. Mainly managed by iocp_just_scheduled() and
|
|
107
|
+
* iocp_on_dequeued(). This value is set to 1 for a new socket. */
|
|
108
|
+
unsigned int refcount;
|
|
109
|
+
/** Actual socket descriptor */
|
|
110
|
+
SOCKET sSocket;
|
|
111
|
+
/** Callback for read operations */
|
|
112
|
+
lcb_ioC_read2_callback rdcb;
|
|
113
|
+
/** Argument for read callback */
|
|
114
|
+
void *rdarg;
|
|
115
|
+
/** Node in linked list of sockets */
|
|
116
|
+
lcb_list_t list;
|
|
117
|
+
} iocp_sockdata_t;
|
|
118
|
+
|
|
119
|
+
typedef struct {
|
|
120
|
+
iocp_overlapped_t ol_conn;
|
|
121
|
+
lcb_io_connect_cb cb;
|
|
122
|
+
} iocp_connect_t;
|
|
123
|
+
|
|
124
|
+
typedef struct iocp_timer_st {
|
|
125
|
+
lcb_list_t list;
|
|
126
|
+
char is_active;
|
|
127
|
+
lcb_U64 ms;
|
|
128
|
+
lcb_ioE_callback cb;
|
|
129
|
+
void *arg;
|
|
130
|
+
} iocp_timer_t;
|
|
131
|
+
|
|
132
|
+
typedef struct iocp_st {
|
|
133
|
+
struct lcb_io_opt_st base; /**< Base table */
|
|
134
|
+
HANDLE hCompletionPort; /**< Completion port */
|
|
135
|
+
iocp_timer_t timer_queue; /**< Pending timers */
|
|
136
|
+
lcb_list_t sockets; /**< List of all sockets */
|
|
137
|
+
unsigned int n_iopending; /**< Count of outstanding I/O operations */
|
|
138
|
+
BOOL breakout; /**< Flag unset during lcb_wait() and set during lcb_breakout() */
|
|
139
|
+
} iocp_t;
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* @brief Call this function when an I/O operation has been scheduled.
|
|
143
|
+
* @param io the io operations structure
|
|
144
|
+
* @param ol the overlapped upon which the operation was associated with
|
|
145
|
+
* @param status the return code of the scheduling API.
|
|
146
|
+
* @return an error code suitable for propagating up to the library.
|
|
147
|
+
*
|
|
148
|
+
* Note that this function does more than convert an error code. If an operation
|
|
149
|
+
* has been successfuly scheduled, the relevant socket's reference count will
|
|
150
|
+
* also be incremented.
|
|
151
|
+
*/
|
|
152
|
+
int iocp_just_scheduled(iocp_t *io, iocp_overlapped_t *ol, int status);
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* @brief Call this function when an I/O operation has been completed. This
|
|
156
|
+
* is the logical end block of the iocp_just_scheduled() API
|
|
157
|
+
* @param io the I/O operations structure
|
|
158
|
+
* @param sd the socket associated with the operation
|
|
159
|
+
* @param action the type of operation performed
|
|
160
|
+
*/
|
|
161
|
+
void iocp_on_dequeued(iocp_t *io, iocp_sockdata_t *sd, int action);
|
|
162
|
+
void iocp_socket_decref(iocp_t *io, iocp_sockdata_t *sd);
|
|
163
|
+
|
|
164
|
+
int iocp_w32err_2errno(DWORD error);
|
|
165
|
+
DWORD iocp_set_last_error(lcb_io_opt_t io, SOCKET sock);
|
|
166
|
+
|
|
167
|
+
/** Get current timestamp in microseconds */
|
|
168
|
+
lcb_U32 iocp_micros(void);
|
|
169
|
+
|
|
170
|
+
/** Get current timestamp in milliseconds */
|
|
171
|
+
#define iocp_millis() (iocp_micros() / 1000)
|
|
172
|
+
|
|
173
|
+
/** Initialize any globals needed by the plugin. This may be called more than
|
|
174
|
+
* once, and will only initialize once. */
|
|
175
|
+
void iocp_initialize_loop_globals(void);
|
|
176
|
+
|
|
177
|
+
/** Call this on a new socket to retrieve its `ConnectEx` function pointer */
|
|
178
|
+
LPFN_CONNECTEX iocp_initialize_connectex(SOCKET s);
|
|
179
|
+
|
|
180
|
+
/** This safely invokes and restores the callback */
|
|
181
|
+
void iocp_write_done(iocp_t *io, iocp_write_t *w, int status);
|
|
182
|
+
|
|
183
|
+
/**Extract the actual error code from an OVERLAPPED after an operation
|
|
184
|
+
* has been received on it
|
|
185
|
+
* @param lpOverlapped the overlapped structure
|
|
186
|
+
* @return The actual Winsock error code
|
|
187
|
+
*/
|
|
188
|
+
int iocp_overlapped_status(OVERLAPPED *lpOverlapped);
|
|
189
|
+
|
|
190
|
+
void iocp_run(lcb_io_opt_t iobase);
|
|
191
|
+
void iocp_stop(lcb_io_opt_t iobase);
|
|
192
|
+
|
|
193
|
+
/** Timer Functions*/
|
|
194
|
+
void iocp_tmq_add(lcb_list_t *list, iocp_timer_t *timer);
|
|
195
|
+
void iocp_tmq_del(lcb_list_t *list, iocp_timer_t *timer);
|
|
196
|
+
lcb_U64 iocp_tmq_next_timeout(lcb_list_t *list, lcb_U64 now);
|
|
197
|
+
iocp_timer_t *iocp_tmq_pop(lcb_list_t *list, lcb_U64 now);
|
|
198
|
+
|
|
199
|
+
LIBCOUCHBASE_API
|
|
200
|
+
lcb_error_t lcb_iocp_new_iops(int version, lcb_io_opt_t *ioret, void *arg);
|
|
201
|
+
|
|
202
|
+
enum { IOCP_TRACE, IOCP_DEBUG, IOCP_INFO, IOCP_WARN, IOCP_ERR, IOCP_FATAL };
|
|
203
|
+
#ifdef IOCP_LOG_VERBOSE
|
|
204
|
+
#include <stdio.h>
|
|
205
|
+
#define IOCP_LOG(facil, ...) \
|
|
206
|
+
fprintf(stderr, "[%s] <%s:%d>: ", #facil, __FILE__, __LINE__); \
|
|
207
|
+
fprintf(stderr, __VA_ARGS__); \
|
|
208
|
+
fprintf(stderr, "\n");
|
|
209
|
+
#else
|
|
210
|
+
#define IOCP_LOG(...)
|
|
211
|
+
#endif
|
|
212
|
+
|
|
213
|
+
#ifdef __cplusplus
|
|
214
|
+
}
|
|
215
|
+
#endif
|
|
216
|
+
|
|
217
|
+
#endif /* LCB_IOCP_H */
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2013 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* New-Style v2 plugin for Windows, Using IOCP
|
|
20
|
+
*
|
|
21
|
+
* This file contains the core routines which actually make up the
|
|
22
|
+
* various "loops" of the event loop.
|
|
23
|
+
*
|
|
24
|
+
* @author Mark Nunberg
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
#include "iocp_iops.h"
|
|
28
|
+
#include <stdio.h>
|
|
29
|
+
|
|
30
|
+
static sGetQueuedCompletionStatusEx pGetQueuedCompletionStatusEx = NULL;
|
|
31
|
+
static int Have_GQCS_Ex = 1;
|
|
32
|
+
|
|
33
|
+
void iocp_initialize_loop_globals(void)
|
|
34
|
+
{
|
|
35
|
+
HMODULE hKernel32;
|
|
36
|
+
static IOCP_SYNCTYPE initialized = 0;
|
|
37
|
+
|
|
38
|
+
if (!IOCP_INITONCE(initialized)) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
hKernel32 = GetModuleHandleA("kernel32.dll");
|
|
43
|
+
if (!hKernel32) {
|
|
44
|
+
fprintf(stderr, "Couldn't load Kernel32.dll: [%u]\n", GetLastError());
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
pGetQueuedCompletionStatusEx = (sGetQueuedCompletionStatusEx)GetProcAddress(hKernel32, "GetQueuedCompletionStatusEx");
|
|
49
|
+
if (pGetQueuedCompletionStatusEx == NULL) {
|
|
50
|
+
Have_GQCS_Ex = 0;
|
|
51
|
+
fprintf(stderr, "Couldn't load GetQueuedCompletionStatusEx. Using fallback [%u]\n",
|
|
52
|
+
GetLastError());
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Make these macros prominent.
|
|
58
|
+
* It's important that they get called after each of our own calls to
|
|
59
|
+
* lcb.
|
|
60
|
+
*/
|
|
61
|
+
#define LOOP_CAN_CONTINUE(io) ((io)->breakout == FALSE)
|
|
62
|
+
#define DO_IF_BREAKOUT(io, e) if (!LOOP_CAN_CONTINUE(io)) { e; }
|
|
63
|
+
#define HAS_QUEUED_IO(io) (io)->n_iopending
|
|
64
|
+
|
|
65
|
+
void iocp_write_done(iocp_t *io, iocp_write_t *w, int status)
|
|
66
|
+
{
|
|
67
|
+
lcb_ioC_write2_callback callback = w->cb;
|
|
68
|
+
void *uarg = w->uarg;
|
|
69
|
+
iocp_sockdata_t *sd = w->ol_write.sd;
|
|
70
|
+
|
|
71
|
+
if (w->state == IOCP_WRITEBUF_ALLOCATED) {
|
|
72
|
+
free(w);
|
|
73
|
+
} else {
|
|
74
|
+
w->state = IOCP_WRITEBUF_AVAILABLE;
|
|
75
|
+
}
|
|
76
|
+
callback(&sd->sd_base, status, uarg);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Handles a single OVERLAPPED entry, and invokes
|
|
81
|
+
* the appropriate event
|
|
82
|
+
*/
|
|
83
|
+
static void
|
|
84
|
+
handle_single_overlapped(iocp_t *io, OVERLAPPED *lpOverlapped,
|
|
85
|
+
ULONG_PTR lpCompletionKey, DWORD dwNumberOfBytesTransferred)
|
|
86
|
+
{
|
|
87
|
+
union { iocp_write_t *w; iocp_connect_t *conn; } u_ol;
|
|
88
|
+
void *pointer_to_free = NULL;
|
|
89
|
+
int opstatus = 0;
|
|
90
|
+
int ws_status;
|
|
91
|
+
int action;
|
|
92
|
+
iocp_overlapped_t *ol = (iocp_overlapped_t *)lpOverlapped;
|
|
93
|
+
iocp_sockdata_t *sd = (iocp_sockdata_t *)lpCompletionKey;
|
|
94
|
+
|
|
95
|
+
IOCP_LOG(IOCP_TRACE, "OL=%p, NB=%lu", ol, dwNumberOfBytesTransferred);
|
|
96
|
+
|
|
97
|
+
ws_status = iocp_overlapped_status(lpOverlapped);
|
|
98
|
+
|
|
99
|
+
if (ws_status) {
|
|
100
|
+
IOCP_LOG(IOCP_WARN, "Got negative status for %p: %d", ol, ws_status);
|
|
101
|
+
io->base.v.v2.error = iocp_w32err_2errno(ws_status);
|
|
102
|
+
opstatus = -1;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
action = ol->action;
|
|
106
|
+
|
|
107
|
+
switch (action) {
|
|
108
|
+
case LCBIOCP_ACTION_READ:
|
|
109
|
+
/** Nothing special in the OVERLAPPED. */
|
|
110
|
+
if (sd->rdcb) {
|
|
111
|
+
sd->rdcb(&sd->sd_base, dwNumberOfBytesTransferred, sd->rdarg);
|
|
112
|
+
}
|
|
113
|
+
break;
|
|
114
|
+
|
|
115
|
+
case LCBIOCP_ACTION_WRITE:
|
|
116
|
+
u_ol.w = IOCP_WRITEOBJ_FROM_OVERLAPPED(lpOverlapped);
|
|
117
|
+
iocp_write_done(io, u_ol.w, opstatus);
|
|
118
|
+
break;
|
|
119
|
+
|
|
120
|
+
case LCBIOCP_ACTION_CONNECT:
|
|
121
|
+
u_ol.conn = (iocp_connect_t *)ol;
|
|
122
|
+
|
|
123
|
+
if (opstatus == 0) {
|
|
124
|
+
/* This "Syncs" the connected state on the socket.. */
|
|
125
|
+
int rv = setsockopt(ol->sd->sSocket,
|
|
126
|
+
SOL_SOCKET, SO_UPDATE_CONNECT_CONTEXT, NULL, 0);
|
|
127
|
+
|
|
128
|
+
if (rv == SOCKET_ERROR) {
|
|
129
|
+
iocp_set_last_error(&io->base, ol->sd->sSocket);
|
|
130
|
+
opstatus = -1;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
u_ol.conn->cb(&sd->sd_base, opstatus);
|
|
134
|
+
pointer_to_free = u_ol.conn;
|
|
135
|
+
break;
|
|
136
|
+
|
|
137
|
+
default:
|
|
138
|
+
fprintf(stderr, "COUCHBASE-IOCP: Unrecognized OVERLAPPED action %d\n", (int)action);
|
|
139
|
+
assert(0);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
iocp_on_dequeued(io, sd, action);
|
|
144
|
+
free(pointer_to_free);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
static int dequeue_io_impl_ex(iocp_t *io, DWORD msTimeout)
|
|
148
|
+
{
|
|
149
|
+
OVERLAPPED_ENTRY entries[64];
|
|
150
|
+
BOOL status;
|
|
151
|
+
ULONG ulRemoved;
|
|
152
|
+
const unsigned max_entries = sizeof(entries) / sizeof(entries[0]);
|
|
153
|
+
unsigned int ii;
|
|
154
|
+
|
|
155
|
+
status = pGetQueuedCompletionStatusEx(io->hCompletionPort,
|
|
156
|
+
entries, max_entries, &ulRemoved, msTimeout, FALSE);
|
|
157
|
+
|
|
158
|
+
if (status == FALSE || ulRemoved == 0) {
|
|
159
|
+
return 0;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
for (ii = 0; ii < ulRemoved; ii++) {
|
|
163
|
+
OVERLAPPED_ENTRY *ent = entries + ii;
|
|
164
|
+
|
|
165
|
+
io->n_iopending--;
|
|
166
|
+
handle_single_overlapped(io, ent->lpOverlapped, ent->lpCompletionKey,
|
|
167
|
+
ent->dwNumberOfBytesTransferred);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return LOOP_CAN_CONTINUE(io);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
static int dequeue_io_impl_compat(iocp_t *io, DWORD msTimeout)
|
|
174
|
+
{
|
|
175
|
+
BOOL result;
|
|
176
|
+
DWORD dwNbytes;
|
|
177
|
+
ULONG_PTR ulPtr;
|
|
178
|
+
OVERLAPPED *lpOverlapped;
|
|
179
|
+
|
|
180
|
+
result = GetQueuedCompletionStatus(io->hCompletionPort,
|
|
181
|
+
&dwNbytes, &ulPtr, &lpOverlapped, msTimeout);
|
|
182
|
+
|
|
183
|
+
if (lpOverlapped == NULL) {
|
|
184
|
+
IOCP_LOG(IOCP_TRACE, "No events left");
|
|
185
|
+
/** Nothing to do here */
|
|
186
|
+
return 0;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
io->n_iopending--;
|
|
190
|
+
handle_single_overlapped(io, lpOverlapped, ulPtr, dwNbytes);
|
|
191
|
+
return LOOP_CAN_CONTINUE(io);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
static void deque_expired_timers(iocp_t *io, lcb_U64 now)
|
|
195
|
+
{
|
|
196
|
+
while (LOOP_CAN_CONTINUE(io)) {
|
|
197
|
+
iocp_timer_t *timer = iocp_tmq_pop(&io->timer_queue.list, now);
|
|
198
|
+
|
|
199
|
+
if (!timer) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
timer->is_active = 0;
|
|
204
|
+
timer->cb(-1, 0, timer->arg);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/** Maximum amount of time the I/O can hog the loop */
|
|
209
|
+
#define IOCP_IOLOOP_MAXTIME 1000
|
|
210
|
+
|
|
211
|
+
static int should_yield(lcb_U32 start)
|
|
212
|
+
{
|
|
213
|
+
lcb_U32 now = iocp_micros();
|
|
214
|
+
return now - start > IOCP_IOLOOP_MAXTIME;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* I'd like to make several behavioral guidelines here:
|
|
219
|
+
*
|
|
220
|
+
* 1) LCB shall call breakout if it wishes to terminate the loop.
|
|
221
|
+
* 2) We shall not handle the case where the user accidentally calls lcb_wait()
|
|
222
|
+
* while not having anything pending. That's just too bad.
|
|
223
|
+
*/
|
|
224
|
+
void iocp_run(lcb_io_opt_t iobase)
|
|
225
|
+
{
|
|
226
|
+
iocp_t *io = (iocp_t *)iobase;
|
|
227
|
+
lcb_U64 now = 0;
|
|
228
|
+
DWORD tmo;
|
|
229
|
+
int remaining;
|
|
230
|
+
|
|
231
|
+
if (!io->breakout) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
io->breakout = FALSE;
|
|
236
|
+
IOCP_LOG(IOCP_INFO, "do-loop BEGIN");
|
|
237
|
+
|
|
238
|
+
do {
|
|
239
|
+
/** To ensure we don't starve pending timers, use an iteration */
|
|
240
|
+
lcb_U32 usStartTime;
|
|
241
|
+
|
|
242
|
+
if (!now) {
|
|
243
|
+
now = iocp_millis();
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
do {
|
|
247
|
+
tmo = (DWORD)iocp_tmq_next_timeout(&io->timer_queue.list, now);
|
|
248
|
+
IOCP_LOG(IOCP_TRACE, "Timeout=%lu msec", tmo);
|
|
249
|
+
|
|
250
|
+
if (tmo) {
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
deque_expired_timers(io, now);
|
|
255
|
+
} while (tmo == 0 && LOOP_CAN_CONTINUE(io));
|
|
256
|
+
|
|
257
|
+
if (!LOOP_CAN_CONTINUE(io)) {
|
|
258
|
+
break;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/** TODO: Use reference counting */
|
|
262
|
+
if (tmo == INFINITE) {
|
|
263
|
+
if (HAS_QUEUED_IO(io)) {
|
|
264
|
+
assert(0 && "Found I/O without any timers");
|
|
265
|
+
}
|
|
266
|
+
break;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
usStartTime = iocp_micros();
|
|
270
|
+
do {
|
|
271
|
+
remaining = Have_GQCS_Ex ?
|
|
272
|
+
dequeue_io_impl_ex(io, tmo) : dequeue_io_impl_compat(io, tmo);
|
|
273
|
+
tmo = 0;
|
|
274
|
+
} while (LOOP_CAN_CONTINUE(io) &&
|
|
275
|
+
remaining && should_yield(usStartTime) == 0);
|
|
276
|
+
|
|
277
|
+
IOCP_LOG(IOCP_TRACE, "Stopped IO loop");
|
|
278
|
+
|
|
279
|
+
if (LOOP_CAN_CONTINUE(io)) {
|
|
280
|
+
now = iocp_millis();
|
|
281
|
+
deque_expired_timers(io, now);
|
|
282
|
+
tmo = (DWORD)iocp_tmq_next_timeout(&io->timer_queue.list, now);
|
|
283
|
+
}
|
|
284
|
+
} while (LOOP_CAN_CONTINUE(io) && (HAS_QUEUED_IO(io) || tmo != INFINITE));
|
|
285
|
+
|
|
286
|
+
IOCP_LOG(IOCP_INFO, "do-loop END");
|
|
287
|
+
io->breakout = TRUE;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
void iocp_stop(lcb_io_opt_t iobase)
|
|
291
|
+
{
|
|
292
|
+
iocp_t *io = (iocp_t *)iobase;
|
|
293
|
+
IOCP_LOG(IOCP_INFO, "Breakout requested");
|
|
294
|
+
io->breakout = TRUE;
|
|
295
|
+
}
|