Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

make error_handler naming consistent #615

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions docs/src/reference/advanced.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@ MPI.infoval
## Error handler objects

```@docs
MPI.Errhandler
MPI.get_errorhandler
MPI.set_errorhandler!
MPI.ErrorHandler
MPI.get_error_handler
MPI.set_error_handler!
```

## Miscellaneous
Expand Down
2 changes: 1 addition & 1 deletion src/MPI.jl
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ include("collective.jl")
include("topology.jl")
include("onesided.jl")
include("io.jl")
include("errhandler.jl")
include("errorhandler.jl")
include("mpiexec_wrapper.jl")

include("deprecated.jl")
Expand Down
4 changes: 4 additions & 0 deletions src/deprecated.jl
Original file line number Diff line number Diff line change
Expand Up @@ -235,3 +235,7 @@ import Base: @deprecate
dims .= Dims_create(nnodes, dims), false)
@deprecate(Cart_coords!(comm::Comm, rank::Integer, coords::MPIBuffertype{Cint}),
coords .= Cart_coords(comm, rank), false)

@deprecate(get_errorhandler(obj), get_errorhandler(obj), false)
@deprecate(set_errorhandler!(obj, errhandler), set_errorhandler!(obj, errhandler), false)
Comment on lines +239 to +240

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
@deprecate(get_errorhandler(obj), get_errorhandler(obj), false)
@deprecate(set_errorhandler!(obj, errhandler), set_errorhandler!(obj, errhandler), false)
@deprecate(get_errorhandler(obj), get_error_handler(obj), false)
@deprecate(set_errorhandler!(obj, errh), set_error_handler!(obj, errh), false)

@deprecate(Errhandler(args...), ErrorHandler(args...), false)
88 changes: 0 additions & 88 deletions src/errhandler.jl

This file was deleted.

88 changes: 88 additions & 0 deletions src/errorhandler.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
"""
MPI.ErrorHandler

An MPI error handler object. Currently only two are supported:

- `ERRORS_ARE_FATAL` (default): program will immediately abort
- `ERRORS_RETURN`: program will throw an `MPIError`.
"""
mutable struct ErrorHandler
val::MPI_Errhandler
end
Base.:(==)(a::ErrorHandler, b::ErrorHandler) = a.val == b.val
Base.cconvert(::Type{MPI_Errhandler}, errhandler::ErrorHandler) = errhandler
Base.unsafe_convert(::Type{MPI_Errhandler}, errhandler::ErrorHandler) = errhandler.val
Base.unsafe_convert(::Type{Ptr{MPI_ErrorHandler}}, errhandler::ErrorHandler) = convert(Ptr{MPI_Errhandler}, pointer_from_objref(errhandler))

const ERRHANDLER_NULL = ErrorHandler(Consts.MPI_ERRHANDLER_NULL[])
const ERRORS_ARE_FATAL = ErrorHandler(Consts.MPI_ERRORS_ARE_FATAL[])
const ERRORS_RETURN = ErrorHandler(Consts.MPI_ERRORS_RETURN[] )
add_load_time_hook!(() -> ERRHANDLER_NULL.val = Consts.MPI_ERRHANDLER_NULL[] )
add_load_time_hook!(() -> ERRORS_ARE_FATAL.val = Consts.MPI_ERRORS_ARE_FATAL[])
add_load_time_hook!(() -> ERRORS_RETURN.val = Consts.MPI_ERRORS_RETURN[] )

ErrorHandler() = ErrorHandler(ERRHANDLER_NULL.val)

function free(errh::ErrorHandler)
if errh != ERRHANDLER_NULL && errh != ERRORS_ARE_FATAL && errh != ERRORS_RETURN && !Finalized()
# int MPI_Errhandler_free(MPI_Errhandler *errhandler)
@mpichk ccall((:MPI_Errhandler_free, libmpi), Cint, (Ptr{MPI_Errhandler},), errh)
end
return nothing
end

function set_default_error_handler_return()
set_error_handler!(COMM_SELF, ERRORS_RETURN)
set_error_handler!(COMM_WORLD, ERRORS_RETURN)
end

"""
MPI.get_error_handler(comm::MPI.Comm)
MPI.get_error_handler(win::MPI.Win)
MPI.get_error_handler(file::MPI.File.FileHandle)

Get the current [`ErrorHandler`](@ref) for the relevant MPI object.

# See also
- [`set_error_handler!`](@ref)
"""
function get_error_handler(comm::Comm)
errh = ErrorHandler()
@mpichk ccall((:MPI_Comm_get_errhandler, libmpi), Cint, (MPI_Comm, Ptr{MPI_Errhandler}), comm, errh)
return errh
end
function get_error_handler(win::Win)
errh = ErrorHandler()
@mpichk ccall((:MPI_Win_get_errhandler, libmpi), Cint, (MPI_Win, Ptr{MPI_Errhandler}), win, errh)
return errh
end
function get_error_handler(file::File.FileHandle)
errh = ErrorHandler()
@mpichk ccall((:MPI_File_get_errhandler, libmpi), Cint, (MPI_File, Ptr{MPI_Errhandler}), file, errh)
return errh
end

"""
MPI.set_error_handler!(comm::MPI.Comm, errh::ErrorHandler)
MPI.set_error_handler!(win::MPI.Win, errh::ErrorHandler)
MPI.set_error_handler!(file::MPI.File.FileHandle, errh::ErrorHandler)

Set the [`ErrorHandler`](@ref) for the relevant MPI object.

# See also
- [`get_error_handler`](@ref)
"""
function set_error_handler!(comm::Comm, errh::ErrorHandler)
@mpichk ccall((:MPI_Comm_set_errhandler, libmpi), Cint, (MPI_Comm, MPI_Errhandler), comm, errh)
return nothing
end
function set_error_handler!(win::Win, errh::ErrorHandler)
@mpichk ccall((:MPI_Win_set_errhandler, libmpi), Cint, (MPI_Win, MPI_Errhandler), win, errh)
return nothing
end
function set_error_handler!(file::File.FileHandle, errh::ErrorHandler)
@mpichk ccall((:MPI_File_set_errhandler, libmpi), Cint, (MPI_File, MPI_Errhandler), file, errh)
return nothing
end


6 changes: 3 additions & 3 deletions test/test_errorhandler.jl
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ using MPI, Test
MPI.Init()

@test MPI.ERRORS_ARE_FATAL != MPI.ERRORS_RETURN
@test MPI.get_errorhandler(MPI.COMM_SELF) == MPI.ERRORS_RETURN
@test MPI.get_error_handler(MPI.COMM_SELF) == MPI.ERRORS_RETURN
@test_throws MPI.MPIError MPI.Send(rand(10), 2, 0, MPI.COMM_SELF)

MPI.set_errorhandler!(MPI.COMM_SELF, MPI.ERRORS_ARE_FATAL)
@test MPI.get_errorhandler(MPI.COMM_SELF) == MPI.ERRORS_ARE_FATAL
MPI.set_error_handler!(MPI.COMM_SELF, MPI.ERRORS_ARE_FATAL)
@test MPI.get_error_handler(MPI.COMM_SELF) == MPI.ERRORS_ARE_FATAL