search for: closed_handle_error

Displaying 8 results from an estimated 8 matches for "closed_handle_error".

2023 Feb 24
1
no way to force-close NBD handle in nbdsh
...er), I realized it is extremely hard to trigger this using nbdsh, but easy to do in C or the Go bindings. In the Go bindings, we intentionally coded things so that the Go structure knows if its underlying C pointer is live or not; it exposes a way to force early closure, then the bindings return a closed_handle_error() if early closure has happened. We probably need to support something similar in the Python bindings. As a short-term hack, I tried directly calling h.__del__() - this is not a good idea, as our current __del__ implementation is not designed to be called twice, and when the later garbage collect...
2023 Feb 25
1
no way to force-close NBD handle in nbdsh
...y hard > to trigger this using nbdsh, but easy to do in C or the Go bindings. > > In the Go bindings, we intentionally coded things so that the Go > structure knows if its underlying C pointer is live or not; it exposes > a way to force early closure, then the bindings return a > closed_handle_error() if early closure has happened. We probably need > to support something similar in the Python bindings. > > As a short-term hack, I tried directly calling h.__del__() - this is > not a good idea, as our current __del__ implementation is not designed > to be called twice, and when...
2020 Mar 17
5
[PATCH libnbd v2 0/3] Unfinished golang bindings.
These bindings get as far as running very simple connections. However there are many missing parts still: * No callbacks. * No functions which handle buffers (pread/pwrite!) This is posted just for general early interest, not even for review. Rich.
2020 Mar 17
0
[PATCH libnbd] Add outline framework for Go language bindings (golang).
...) +} + +func get_error (op string) *LibnbdError { + // NB: DO NOT try to free c_errmsg! + c_errmsg := C.nbd_get_error () + errmsg := C.GoString (c_errmsg) + + errno := syscall.Errno (C.nbd_get_errno ()) + + return &LibnbdError{ Op : op, Errmsg : errmsg, Errno : errno } +} + +func closed_handle_error (op string) *LibnbdError { + return &LibnbdError{ Op : op, Errmsg : \"handle is closed\", + Errno : syscall.Errno (0) } +} + +/* Close the handle. */ +func (h *Libnbd) Close () *LibnbdError { + if h.h == nil { + return closed_handle_error (\"c...
2020 Mar 17
0
[PATCH libnbd v2 2/3] Add outline framework for Go language bindings (golang).
...+func (e *LibnbdError) Error() string { + return e.String() +} + +func get_error (op string, c_err C.struct_error) *LibnbdError { + errmsg := C.GoString (c_err.error) + errno := syscall.Errno (c_err.errnum) + return &LibnbdError{ Op : op, Errmsg : errmsg, Errno : errno } +} + +func closed_handle_error (op string) *LibnbdError { + return &LibnbdError{ Op : op, Errmsg : \"handle is closed\", + Errno : syscall.Errno (0) } +} + +/* Create a new handle. */ +func Create () (*Libnbd, error) { + c_err := C.struct_error{} + c_h := C._nbd_create_wrapper (&amp...
2020 Mar 24
1
[PATCH libnbd v3] Add Go language bindings (golang) (RHBZ#1814538).
This feature is roughly finished now, although it needs a few more tests and some examples. It's pretty much up to par with all the other bindings, but it lacks a completely safe AIO buffer. It won't stop you from freeing the buffer too early) because golang's GC inexplicably lacks a way to declare a root from C. I can probably do it with a global variable and ref counting on the
2020 Mar 17
0
[PATCH libnbd v2 3/3] golang: Add straightforward bindings, without callbacks.
...) args; + if optargs <> [] then ( + if !comma then pr ", "; + comma := true; + pr "optargs *Optargs_%s" uname + ); + pr ") (%s, error)" (go_ret_type ret); + pr " {\n"; + pr " if h.h == nil {\n"; + pr " return %s, closed_handle_error (\"%s\")\n" + (go_ret_error ret) name; + pr " }\n"; + pr "\n"; + pr " c_err := C.struct_error{}\n"; + List.iter ( + function + | Bool n -> + pr " c_%s := C.bool (%s)\n" n n + | BytesIn (n, len) -> + pr...
2020 Mar 25
3
[PATCH libnbd v4] Add Go language bindings (golang) (RHBZ#1814538).
Now runs a complete set of tests, notably including the AIO test. File descriptors are passed in and out as plain ints (instead of *os.File) for a couple of reasons: (1) We have to pass the plain int to syscall.Select. (2) Turning an fd into an os.File causes golang to set the blocking flag which is deeply unhelpful. Rich.