summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandru Scvortov <alexandru@rabbitmq.com>2011-08-25 19:42:42 +0100
committerAlexandru Scvortov <alexandru@rabbitmq.com>2011-08-25 19:42:42 +0100
commitf2412e2f4af51dcdb8c5998595ba49e42979cb77 (patch)
tree247cea887772b13f69248305f22678a14069d44e
parentbb7006f50c9bee6231824c828af32f893e06d039 (diff)
parentc0420ca5f3d96e701df27b95a582acfe6d2d3b12 (diff)
downloadrabbitmq-server-bug23056.tar.gz
merge default into bug 23056bug23056
-rw-r--r--codegen.py3
-rw-r--r--include/rabbit_backing_queue_spec.hrl5
-rw-r--r--src/delegate.erl6
-rw-r--r--src/delegate_sup.erl2
-rw-r--r--src/file_handle_cache.erl13
-rw-r--r--src/gatherer.erl2
-rw-r--r--src/gm.erl4
-rw-r--r--src/rabbit.erl8
-rw-r--r--src/rabbit_access_control.erl3
-rw-r--r--src/rabbit_amqqueue.erl9
-rw-r--r--src/rabbit_amqqueue_process.erl19
-rw-r--r--src/rabbit_amqqueue_sup.erl14
-rw-r--r--src/rabbit_client_sup.erl3
-rw-r--r--src/rabbit_command_assembler.erl4
-rw-r--r--src/rabbit_error_logger.erl10
-rw-r--r--src/rabbit_log.erl2
-rw-r--r--src/rabbit_mirror_queue_master.erl4
-rw-r--r--src/rabbit_mirror_queue_misc.erl20
-rw-r--r--src/rabbit_mirror_queue_slave.erl11
-rw-r--r--src/rabbit_mnesia.erl2
-rw-r--r--src/rabbit_msg_store.erl2
-rw-r--r--src/rabbit_networking.erl27
-rw-r--r--src/rabbit_node_monitor.erl1
-rw-r--r--src/rabbit_prelaunch.erl3
-rw-r--r--src/rabbit_reader.erl9
-rw-r--r--src/rabbit_restartable_sup.erl10
-rw-r--r--src/rabbit_sup.erl15
-rw-r--r--src/rabbit_writer.erl3
-rw-r--r--src/tcp_acceptor_sup.erl8
-rw-r--r--src/tcp_listener.erl8
-rw-r--r--src/tcp_listener_sup.erl15
-rw-r--r--src/test_sup.erl12
-rw-r--r--src/vm_memory_monitor.erl4
-rw-r--r--src/worker_pool.erl1
-rw-r--r--src/worker_pool_sup.erl4
35 files changed, 238 insertions, 28 deletions
diff --git a/codegen.py b/codegen.py
index 8cd9dab8..7636c196 100644
--- a/codegen.py
+++ b/codegen.py
@@ -371,6 +371,8 @@ def genErl(spec):
classIds.add(m.klass.index)
print prettyType("amqp_class_id()",
["%i" % ci for ci in classIds])
+ print prettyType("amqp_class_name()",
+ ["%s" % c.erlangName() for c in spec.allClasses()])
print "-endif. % use_specs"
print """
@@ -378,6 +380,7 @@ def genErl(spec):
-ifdef(use_specs).
-spec(version/0 :: () -> {non_neg_integer(), non_neg_integer(), non_neg_integer()}).
-spec(lookup_method_name/1 :: (amqp_method()) -> amqp_method_name()).
+-spec(lookup_class_name/1 :: (amqp_class_id()) -> amqp_class_name()).
-spec(method_id/1 :: (amqp_method_name()) -> amqp_method()).
-spec(method_has_content/1 :: (amqp_method_name()) -> boolean()).
-spec(is_method_synchronous/1 :: (amqp_method_record()) -> boolean()).
diff --git a/include/rabbit_backing_queue_spec.hrl b/include/rabbit_backing_queue_spec.hrl
index ee102f5e..20fe4234 100644
--- a/include/rabbit_backing_queue_spec.hrl
+++ b/include/rabbit_backing_queue_spec.hrl
@@ -26,6 +26,7 @@
fun ((rabbit_types:message_properties())
-> rabbit_types:message_properties())).
-type(async_callback() :: fun ((atom(), fun ((atom(), state()) -> state())) -> 'ok')).
+-type(duration() :: ('undefined' | 'infinity' | number())).
-spec(start/1 :: ([rabbit_amqqueue:name()]) -> 'ok').
-spec(stop/0 :: () -> 'ok').
@@ -55,8 +56,8 @@
-spec(len/1 :: (state()) -> non_neg_integer()).
-spec(is_empty/1 :: (state()) -> boolean()).
-spec(set_ram_duration_target/2 ::
- (('undefined' | 'infinity' | number()), state()) -> state()).
--spec(ram_duration/1 :: (state()) -> {number(), state()}).
+ (duration(), state()) -> state()).
+-spec(ram_duration/1 :: (state()) -> {duration(), state()}).
-spec(needs_timeout/1 :: (state()) -> 'false' | 'timed' | 'idle').
-spec(timeout/1 :: (state()) -> state()).
-spec(handle_pre_hibernate/1 :: (state()) -> state()).
diff --git a/src/delegate.erl b/src/delegate.erl
index 17046201..edb4eba4 100644
--- a/src/delegate.erl
+++ b/src/delegate.erl
@@ -28,13 +28,13 @@
-ifdef(use_specs).
-spec(start_link/1 ::
- (non_neg_integer()) -> {'ok', pid()} | {'error', any()}).
--spec(invoke_no_result/2 ::
- (pid() | [pid()], fun ((pid()) -> any())) -> 'ok').
+ (non_neg_integer()) -> {'ok', pid()} | ignore | {'error', any()}).
-spec(invoke/2 ::
( pid(), fun ((pid()) -> A)) -> A;
([pid()], fun ((pid()) -> A)) -> {[{pid(), A}],
[{pid(), term()}]}).
+-spec(invoke_no_result/2 ::
+ (pid() | [pid()], fun ((pid()) -> any())) -> 'ok').
-endif.
diff --git a/src/delegate_sup.erl b/src/delegate_sup.erl
index fc693c7d..4c131a6c 100644
--- a/src/delegate_sup.erl
+++ b/src/delegate_sup.erl
@@ -28,7 +28,7 @@
-ifdef(use_specs).
--spec(start_link/1 :: (integer()) -> {'ok', pid()} | {'error', any()}).
+-spec(start_link/1 :: (integer()) -> rabbit_types:ok_pid_or_error()).
-spec(count/1 :: ([node()]) -> integer()).
-endif.
diff --git a/src/file_handle_cache.erl b/src/file_handle_cache.erl
index 3c2111dc..776ac43a 100644
--- a/src/file_handle_cache.erl
+++ b/src/file_handle_cache.erl
@@ -228,7 +228,7 @@
-spec(register_callback/3 :: (atom(), atom(), [any()]) -> 'ok').
-spec(open/3 ::
- (string(), [any()],
+ (file:filename(), [any()],
[{'write_buffer', (non_neg_integer() | 'infinity' | 'unbuffered')}])
-> val_or_error(ref())).
-spec(close/1 :: (ref()) -> ok_or_error()).
@@ -243,17 +243,17 @@
-spec(flush/1 :: (ref()) -> ok_or_error()).
-spec(copy/3 :: (ref(), ref(), non_neg_integer()) ->
val_or_error(non_neg_integer())).
--spec(set_maximum_since_use/1 :: (non_neg_integer()) -> 'ok').
-spec(delete/1 :: (ref()) -> ok_or_error()).
-spec(clear/1 :: (ref()) -> ok_or_error()).
+-spec(set_maximum_since_use/1 :: (non_neg_integer()) -> 'ok').
-spec(obtain/0 :: () -> 'ok').
-spec(transfer/1 :: (pid()) -> 'ok').
-spec(set_limit/1 :: (non_neg_integer()) -> 'ok').
-spec(get_limit/0 :: () -> non_neg_integer()).
--spec(info_keys/0 :: () -> [atom()]).
--spec(info/0 :: () -> [{atom(), any()}]).
--spec(info/1 :: ([atom()]) -> [{atom(), any()}]).
--spec(ulimit/0 :: () -> 'infinity' | 'unknown' | non_neg_integer()).
+-spec(info_keys/0 :: () -> rabbit_types:info_keys()).
+-spec(info/0 :: () -> rabbit_types:infos()).
+-spec(info/1 :: ([atom()]) -> rabbit_types:infos()).
+-spec(ulimit/0 :: () -> 'unknown' | non_neg_integer()).
-endif.
@@ -794,7 +794,6 @@ init([]) ->
Watermark;
_ ->
case ulimit() of
- infinity -> infinity;
unknown -> ?FILE_HANDLES_LIMIT_OTHER;
Lim -> lists:max([2, Lim - ?RESERVED_FOR_OTHERS])
end
diff --git a/src/gatherer.erl b/src/gatherer.erl
index aa43e9a9..fe976b50 100644
--- a/src/gatherer.erl
+++ b/src/gatherer.erl
@@ -27,7 +27,7 @@
-ifdef(use_specs).
--spec(start_link/0 :: () -> {'ok', pid()} | {'error', any()}).
+-spec(start_link/0 :: () -> rabbit_types:ok_pid_or_error()).
-spec(stop/1 :: (pid()) -> 'ok').
-spec(fork/1 :: (pid()) -> 'ok').
-spec(finish/1 :: (pid()) -> 'ok').
diff --git a/src/gm.erl b/src/gm.erl
index 8b4d2776..8c838a70 100644
--- a/src/gm.erl
+++ b/src/gm.erl
@@ -422,9 +422,9 @@
-type(group_name() :: any()).
--spec(create_tables/0 :: () -> 'ok').
+-spec(create_tables/0 :: () -> 'ok' | {'aborted', any()}).
-spec(start_link/3 :: (group_name(), atom(), any()) ->
- {'ok', pid()} | {'error', any()}).
+ rabbit_types:ok_pid_or_error()).
-spec(leave/1 :: (pid()) -> 'ok').
-spec(broadcast/2 :: (pid(), any()) -> 'ok').
-spec(confirmed_broadcast/2 :: (pid(), any()) -> 'ok').
diff --git a/src/rabbit.erl b/src/rabbit.erl
index 8cae7fde..20b3e275 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -203,6 +203,14 @@
-spec(boot_delegate/0 :: () -> 'ok').
-spec(recover/0 :: () -> 'ok').
+-spec(start/2 :: ('normal',[]) ->
+ {'error',
+ {'erlang_version_too_old',
+ {'found',[any()]},
+ {'required',[any(),...]}}} |
+ {'ok',pid()}).
+-spec(stop/1 :: (_) -> 'ok').
+
-endif.
%%----------------------------------------------------------------------------
diff --git a/src/rabbit_access_control.erl b/src/rabbit_access_control.erl
index c0ae18c0..ca28d686 100644
--- a/src/rabbit_access_control.erl
+++ b/src/rabbit_access_control.erl
@@ -32,6 +32,9 @@
-spec(check_user_pass_login/2 ::
(rabbit_types:username(), rabbit_types:password())
-> {'ok', rabbit_types:user()} | {'refused', string(), [any()]}).
+-spec(check_user_login/2 ::
+ (rabbit_types:username(), [{atom(), any()}])
+ -> {'ok', rabbit_types:user()} | {'refused', string(), [any()]}).
-spec(check_vhost_access/2 ::
(rabbit_types:user(), rabbit_types:vhost())
-> 'ok' | rabbit_types:channel_exit()).
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl
index 5bd42d9a..b3e92b69 100644
--- a/src/rabbit_amqqueue.erl
+++ b/src/rabbit_amqqueue.erl
@@ -49,7 +49,7 @@
-type(name() :: rabbit_types:r('queue')).
-type(qlen() :: rabbit_types:ok(non_neg_integer())).
--type(qfun(A) :: fun ((rabbit_types:amqqueue()) -> A)).
+-type(qfun(A) :: fun ((rabbit_types:amqqueue()) -> A | no_return())).
-type(qmsg() :: {name(), pid(), msg_id(), boolean(), rabbit_types:message()}).
-type(msg_id() :: non_neg_integer()).
-type(ok_or_errors() ::
@@ -64,6 +64,9 @@
rabbit_framing:amqp_table(), rabbit_types:maybe(pid()))
-> {'new' | 'existing', rabbit_types:amqqueue()} |
rabbit_types:channel_exit()).
+-spec(internal_declare/2 ::
+ (rabbit_types:amqqueue(), boolean())
+ -> queue_or_not_found() | rabbit_misc:thunk(queue_or_not_found())).
-spec(lookup/1 ::
(name()) -> rabbit_types:ok(rabbit_types:amqqueue()) |
rabbit_types:error('not_found')).
@@ -132,9 +135,6 @@
-spec(notify_sent/2 :: (pid(), pid()) -> 'ok').
-spec(unblock/2 :: (pid(), pid()) -> 'ok').
-spec(flush_all/2 :: ([pid()], pid()) -> 'ok').
--spec(internal_declare/2 ::
- (rabbit_types:amqqueue(), boolean())
- -> queue_or_not_found() | rabbit_misc:thunk(queue_or_not_found())).
-spec(internal_delete/1 ::
(name()) -> rabbit_types:ok_or_error('not_found') |
rabbit_types:connection_exit() |
@@ -147,6 +147,7 @@
-spec(set_maximum_since_use/2 :: (pid(), non_neg_integer()) -> 'ok').
-spec(on_node_down/1 :: (node()) -> 'ok').
-spec(pseudo_queue/2 :: (name(), pid()) -> rabbit_types:amqqueue()).
+-spec(store_queue/1 :: (rabbit_types:amqqueue()) -> 'ok').
-endif.
diff --git a/src/rabbit_amqqueue_process.erl b/src/rabbit_amqqueue_process.erl
index e5038efe..734b2291 100644
--- a/src/rabbit_amqqueue_process.erl
+++ b/src/rabbit_amqqueue_process.erl
@@ -29,12 +29,12 @@
-export([start_link/1, info_keys/0]).
+-export([init_with_backing_queue_state/7]).
+
-export([init/1, terminate/2, code_change/3, handle_call/3, handle_cast/2,
handle_info/2, handle_pre_hibernate/1, prioritise_call/3,
prioritise_cast/2, prioritise_info/2, format_message_queue/2]).
--export([init_with_backing_queue_state/7]).
-
%% Queue's state
-record(q, {q,
exclusive_consumer,
@@ -64,6 +64,21 @@
is_limit_active,
unsent_message_count}).
+%%----------------------------------------------------------------------------
+
+-ifdef(use_specs).
+
+-spec(start_link/1 ::
+ (rabbit_types:amqqueue()) -> rabbit_types:ok_pid_or_error()).
+-spec(info_keys/0 :: () -> rabbit_types:info_keys()).
+-spec(init_with_backing_queue_state/7 ::
+ (rabbit_types:amqqueue(), atom(), tuple(), any(), [any()],
+ [rabbit_types:delivery()], dict()) -> #q{}).
+
+-endif.
+
+%%----------------------------------------------------------------------------
+
-define(STATISTICS_KEYS,
[pid,
exclusive_consumer_pid,
diff --git a/src/rabbit_amqqueue_sup.erl b/src/rabbit_amqqueue_sup.erl
index 2c28adce..7b3ebcf2 100644
--- a/src/rabbit_amqqueue_sup.erl
+++ b/src/rabbit_amqqueue_sup.erl
@@ -26,6 +26,20 @@
-define(SERVER, ?MODULE).
+%%----------------------------------------------------------------------------
+
+-ifdef(use_specs).
+
+-spec(start_link/0 :: () -> rabbit_types:ok_pid_or_error()).
+-spec(start_child/2 ::
+ (node(), [any()]) -> rabbit_types:ok(pid() | undefined) |
+ rabbit_types:ok({pid(), any()}) |
+ rabbit_types:error(any())).
+
+-endif.
+
+%%----------------------------------------------------------------------------
+
start_link() ->
supervisor2:start_link({local, ?SERVER}, ?MODULE, []).
diff --git a/src/rabbit_client_sup.erl b/src/rabbit_client_sup.erl
index 15e92542..dfb400e3 100644
--- a/src/rabbit_client_sup.erl
+++ b/src/rabbit_client_sup.erl
@@ -28,8 +28,7 @@
-ifdef(use_specs).
--spec(start_link/1 :: (mfa()) ->
- rabbit_types:ok_pid_or_error()).
+-spec(start_link/1 :: (mfa()) -> rabbit_types:ok_pid_or_error()).
-spec(start_link/2 :: ({'local', atom()}, mfa()) ->
rabbit_types:ok_pid_or_error()).
diff --git a/src/rabbit_command_assembler.erl b/src/rabbit_command_assembler.erl
index 07036ce8..a0953eab 100644
--- a/src/rabbit_command_assembler.erl
+++ b/src/rabbit_command_assembler.erl
@@ -22,8 +22,12 @@
%%----------------------------------------------------------------------------
+%%----------------------------------------------------------------------------
+
-ifdef(use_specs).
+-export_type([frame/0]).
+
-type(frame_type() :: ?FRAME_METHOD | ?FRAME_HEADER | ?FRAME_BODY |
?FRAME_OOB_METHOD | ?FRAME_OOB_HEADER | ?FRAME_OOB_BODY |
?FRAME_TRACE | ?FRAME_HEARTBEAT).
diff --git a/src/rabbit_error_logger.erl b/src/rabbit_error_logger.erl
index 93aad9e3..6e29ace7 100644
--- a/src/rabbit_error_logger.erl
+++ b/src/rabbit_error_logger.erl
@@ -27,6 +27,16 @@
-export([init/1, terminate/2, code_change/3, handle_call/2, handle_event/2,
handle_info/2]).
+%%----------------------------------------------------------------------------
+
+-ifdef(use_specs).
+
+-spec(boot/0 :: () -> 'ok').
+
+-endif.
+
+%%----------------------------------------------------------------------------
+
boot() ->
{ok, DefaultVHost} = application:get_env(default_vhost),
ok = error_logger:add_report_handler(?MODULE, [DefaultVHost]).
diff --git a/src/rabbit_log.erl b/src/rabbit_log.erl
index 8207d6bc..558e0957 100644
--- a/src/rabbit_log.erl
+++ b/src/rabbit_log.erl
@@ -42,6 +42,8 @@
-spec(error/1 :: (string()) -> 'ok').
-spec(error/2 :: (string(), [any()]) -> 'ok').
+-spec(message/4 :: (_,_,_,_) -> 'ok').
+
-endif.
%%----------------------------------------------------------------------------
diff --git a/src/rabbit_mirror_queue_master.erl b/src/rabbit_mirror_queue_master.erl
index ad5fd28f..5fc6341f 100644
--- a/src/rabbit_mirror_queue_master.erl
+++ b/src/rabbit_mirror_queue_master.erl
@@ -59,6 +59,10 @@
known_senders :: set()
}).
+-type(ack() :: non_neg_integer()).
+-type(state() :: master_state()).
+-include("rabbit_backing_queue_spec.hrl").
+
-spec(promote_backing_queue_state/6 ::
(pid(), atom(), any(), pid(), dict(), [pid()]) -> master_state()).
-spec(sender_death_fun/0 :: () -> death_fun()).
diff --git a/src/rabbit_mirror_queue_misc.erl b/src/rabbit_mirror_queue_misc.erl
index cf8e9484..725e0c18 100644
--- a/src/rabbit_mirror_queue_misc.erl
+++ b/src/rabbit_mirror_queue_misc.erl
@@ -22,6 +22,26 @@
-include("rabbit.hrl").
+%%----------------------------------------------------------------------------
+
+-ifdef(use_specs).
+
+-spec(remove_from_queue/2 ::
+ (rabbit_amqqueue:name(), [pid()])
+ -> rabbit_types:ok_or_error2(pid(), not_found)).
+-spec(on_node_up/0 :: () -> 'ok').
+-spec(drop_mirror/2 ::
+ (rabbit_amqqueue:name(), node()) -> rabbit_types:ok_or_error(any())).
+-spec(add_mirror/2 ::
+ (rabbit_amqqueue:name(), node()) -> rabbit_types:ok_or_error(any())).
+-spec(add_mirror/3 ::
+ (rabbit_types:vhost(), binary(), atom())
+ -> rabbit_types:ok_or_error(any())).
+
+-endif.
+
+%%----------------------------------------------------------------------------
+
%% If the dead pids include the queue pid (i.e. the master has died)
%% then only remove that if we are about to be promoted. Otherwise we
%% can have the situation where a slave updates the mnesia record for
diff --git a/src/rabbit_mirror_queue_slave.erl b/src/rabbit_mirror_queue_slave.erl
index 3c453981..43962491 100644
--- a/src/rabbit_mirror_queue_slave.erl
+++ b/src/rabbit_mirror_queue_slave.erl
@@ -45,8 +45,19 @@
-behaviour(gm).
-include("rabbit.hrl").
+
+%%----------------------------------------------------------------------------
+
-include("gm_specs.hrl").
+-ifdef(use_specs).
+%% Shut dialyzer up
+-spec(promote_me/2 :: (_, _) -> no_return()).
+-endif.
+
+%%----------------------------------------------------------------------------
+
+
-define(CREATION_EVENT_KEYS,
[pid,
name,
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index 1ea90971..665b15c5 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -70,6 +70,8 @@
-spec(on_node_up/1 :: (node()) -> 'ok').
-spec(on_node_down/1 :: (node()) -> 'ok').
+-spec(table_names/0 :: () -> [atom()]).
+
-endif.
%%----------------------------------------------------------------------------
diff --git a/src/rabbit_msg_store.erl b/src/rabbit_msg_store.erl
index 17d5f64b..cc12eb5d 100644
--- a/src/rabbit_msg_store.erl
+++ b/src/rabbit_msg_store.erl
@@ -146,6 +146,8 @@
-spec(client_terminate/1 :: (client_msstate()) -> 'ok').
-spec(client_delete_and_terminate/1 :: (client_msstate()) -> 'ok').
-spec(client_ref/1 :: (client_msstate()) -> client_ref()).
+-spec(close_all_indicated/1 ::
+ (client_msstate()) -> rabbit_types:ok(client_msstate())).
-spec(write/3 :: (rabbit_types:msg_id(), msg(), client_msstate()) -> 'ok').
-spec(read/2 :: (rabbit_types:msg_id(), client_msstate()) ->
{rabbit_types:ok(msg()) | 'not_found', client_msstate()}).
diff --git a/src/rabbit_networking.erl b/src/rabbit_networking.erl
index b2abcba6..31f476fc 100644
--- a/src/rabbit_networking.erl
+++ b/src/rabbit_networking.erl
@@ -78,6 +78,33 @@
-spec(on_node_down/1 :: (node()) -> 'ok').
-spec(check_tcp_listener_address/2 :: (atom(), listener_config())
-> [{inet:ip_address(), ip_port(), family(), atom()}]).
+-spec(ensure_ssl/0 :: () -> rabbit_types:infos()).
+-spec(ssl_transform_fun/1 ::
+ (rabbit_types:infos())
+ -> fun ((rabbit_net:socket())
+ -> rabbit_types:ok_or_error(#ssl_socket{}))).
+
+-spec(boot/0 :: () -> 'ok').
+-spec(start_client/1 ::
+ (port() | #ssl_socket{ssl::{'sslsocket',_,_}}) ->
+ atom() | pid() | port() | {atom(),atom()}).
+-spec(start_ssl_client/2 ::
+ (_,port() | #ssl_socket{ssl::{'sslsocket',_,_}}) ->
+ atom() | pid() | port() | {atom(),atom()}).
+-spec(tcp_listener_started/3 ::
+ (_,
+ string() |
+ {byte(),byte(),byte(),byte()} |
+ {char(),char(),char(),char(),char(),char(),char(),char()},
+ _) ->
+ 'ok').
+-spec(tcp_listener_stopped/3 ::
+ (_,
+ string() |
+ {byte(),byte(),byte(),byte()} |
+ {char(),char(),char(),char(),char(),char(),char(),char()},
+ _) ->
+ 'ok').
-endif.
diff --git a/src/rabbit_node_monitor.erl b/src/rabbit_node_monitor.erl
index cb4f826d..8aa24ab5 100644
--- a/src/rabbit_node_monitor.erl
+++ b/src/rabbit_node_monitor.erl
@@ -31,6 +31,7 @@
-ifdef(use_specs).
+-spec(start_link/0 :: () -> rabbit_types:ok_pid_or_error()).
-spec(rabbit_running_on/1 :: (node()) -> 'ok').
-spec(notify_cluster/0 :: () -> 'ok').
diff --git a/src/rabbit_prelaunch.erl b/src/rabbit_prelaunch.erl
index 92829e49..e3cf8ebe 100644
--- a/src/rabbit_prelaunch.erl
+++ b/src/rabbit_prelaunch.erl
@@ -29,6 +29,9 @@
-spec(start/0 :: () -> no_return()).
-spec(stop/0 :: () -> 'ok').
+%% Shut dialyzer up
+-spec(terminate/1 :: (string()) -> no_return()).
+-spec(terminate/2 :: (string(), [any()]) -> no_return()).
-endif.
diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl
index 7eec2a2e..3822aaeb 100644
--- a/src/rabbit_reader.erl
+++ b/src/rabbit_reader.erl
@@ -85,6 +85,15 @@
rabbit_types:ok_or_error2(
rabbit_net:socket(), any()))) -> no_return()).
+-spec(mainloop/2 :: (_,#v1{}) -> any()).
+-spec(system_code_change/4 :: (_,_,_,_) -> {'ok',_}).
+-spec(system_continue/3 :: (_,_,#v1{}) -> any()).
+-spec(system_terminate/4 :: (_,_,_,_) -> none()).
+
+-spec(process_channel_frame/5 ::
+ (rabbit_command_assembler:frame(), pid(), non_neg_integer(), pid(),
+ tuple()) -> tuple()).
+
-endif.
%%--------------------------------------------------------------------------
diff --git a/src/rabbit_restartable_sup.erl b/src/rabbit_restartable_sup.erl
index 0491244b..cda3ccbe 100644
--- a/src/rabbit_restartable_sup.erl
+++ b/src/rabbit_restartable_sup.erl
@@ -24,6 +24,16 @@
-include("rabbit.hrl").
+%%----------------------------------------------------------------------------
+
+-ifdef(use_specs).
+
+-spec(start_link/2 :: (atom(), mfa()) -> rabbit_types:ok_pid_or_error()).
+
+-endif.
+
+%%----------------------------------------------------------------------------
+
start_link(Name, {_M, _F, _A} = Fun) ->
supervisor:start_link({local, Name}, ?MODULE, [Fun]).
diff --git a/src/rabbit_sup.erl b/src/rabbit_sup.erl
index 508b127e..802ea5e2 100644
--- a/src/rabbit_sup.erl
+++ b/src/rabbit_sup.erl
@@ -27,6 +27,21 @@
-define(SERVER, ?MODULE).
+%%----------------------------------------------------------------------------
+
+-ifdef(use_specs).
+
+-spec(start_link/0 :: () -> rabbit_types:ok_pid_or_error()).
+-spec(start_child/1 :: (atom()) -> 'ok').
+-spec(start_child/3 :: (atom(), atom(), [any()]) -> 'ok').
+-spec(start_restartable_child/1 :: (atom()) -> 'ok').
+-spec(start_restartable_child/2 :: (atom(), [any()]) -> 'ok').
+-spec(stop_child/1 :: (atom()) -> rabbit_types:ok_or_error(any())).
+
+-endif.
+
+%%----------------------------------------------------------------------------
+
start_link() ->
supervisor:start_link({local, ?SERVER}, ?MODULE, []).
diff --git a/src/rabbit_writer.erl b/src/rabbit_writer.erl
index ac3434d2..091b50e4 100644
--- a/src/rabbit_writer.erl
+++ b/src/rabbit_writer.erl
@@ -67,6 +67,9 @@
non_neg_integer(), rabbit_types:protocol())
-> 'ok').
+-spec(mainloop/2 :: (_,_) -> 'done').
+-spec(mainloop1/2 :: (_,_) -> any()).
+
-endif.
%%---------------------------------------------------------------------------
diff --git a/src/tcp_acceptor_sup.erl b/src/tcp_acceptor_sup.erl
index bf0eacd1..4c835598 100644
--- a/src/tcp_acceptor_sup.erl
+++ b/src/tcp_acceptor_sup.erl
@@ -22,6 +22,14 @@
-export([init/1]).
+%%----------------------------------------------------------------------------
+
+-ifdef(use_specs).
+-spec(start_link/2 :: (atom(), mfa()) -> rabbit_types:ok_pid_or_error()).
+-endif.
+
+%%----------------------------------------------------------------------------
+
start_link(Name, Callback) ->
supervisor:start_link({local,Name}, ?MODULE, Callback).
diff --git a/src/tcp_listener.erl b/src/tcp_listener.erl
index cd646969..ad2a0d02 100644
--- a/src/tcp_listener.erl
+++ b/src/tcp_listener.erl
@@ -25,6 +25,14 @@
-record(state, {sock, on_startup, on_shutdown, label}).
+%%----------------------------------------------------------------------------
+
+-ifdef(use_specs).
+-spec(start_link/8 ::
+ (gen_tcp:ip_address(), integer(), rabbit_types:infos(), integer(),
+ atom(), mfa(), mfa(), string()) -> rabbit_types:ok_pid_or_error()).
+-endif.
+
%%--------------------------------------------------------------------
start_link(IPAddress, Port, SocketOpts,
diff --git a/src/tcp_listener_sup.erl b/src/tcp_listener_sup.erl
index 58c2f30c..5bff5c27 100644
--- a/src/tcp_listener_sup.erl
+++ b/src/tcp_listener_sup.erl
@@ -22,6 +22,21 @@
-export([init/1]).
+%%----------------------------------------------------------------------------
+
+-ifdef(use_specs).
+
+-spec(start_link/7 ::
+ (gen_tcp:ip_address(), integer(), rabbit_types:infos(), mfa(), mfa(),
+ mfa(), string()) -> rabbit_types:ok_pid_or_error()).
+-spec(start_link/8 ::
+ (gen_tcp:ip_address(), integer(), rabbit_types:infos(), mfa(), mfa(),
+ mfa(), integer(), string()) -> rabbit_types:ok_pid_or_error()).
+
+-endif.
+
+%%----------------------------------------------------------------------------
+
start_link(IPAddress, Port, SocketOpts, OnStartup, OnShutdown,
AcceptCallback, Label) ->
start_link(IPAddress, Port, SocketOpts, OnStartup, OnShutdown,
diff --git a/src/test_sup.erl b/src/test_sup.erl
index 84c4121c..5feb146f 100644
--- a/src/test_sup.erl
+++ b/src/test_sup.erl
@@ -21,6 +21,18 @@
-export([test_supervisor_delayed_restart/0,
init/1, start_child/0]).
+%%----------------------------------------------------------------------------
+
+-ifdef(use_specs).
+
+-spec(test_supervisor_delayed_restart/0 :: () -> 'passed').
+
+-endif.
+
+%%----------------------------------------------------------------------------
+%% Public API
+%%----------------------------------------------------------------------------
+
test_supervisor_delayed_restart() ->
passed = with_sup(simple_one_for_one_terminate,
fun (SupPid) ->
diff --git a/src/vm_memory_monitor.erl b/src/vm_memory_monitor.erl
index fb2fa267..a54bf996 100644
--- a/src/vm_memory_monitor.erl
+++ b/src/vm_memory_monitor.erl
@@ -57,15 +57,15 @@
-ifdef(use_specs).
--spec(start_link/1 :: (float()) -> {'ok', pid()} | {'error', any()}).
+-spec(start_link/1 :: (float()) -> rabbit_types:ok_pid_or_error()).
-spec(update/0 :: () -> 'ok').
-spec(get_total_memory/0 :: () -> (non_neg_integer() | 'unknown')).
-spec(get_vm_limit/0 :: () -> non_neg_integer()).
--spec(get_memory_limit/0 :: () -> non_neg_integer()).
-spec(get_check_interval/0 :: () -> non_neg_integer()).
-spec(set_check_interval/1 :: (non_neg_integer()) -> 'ok').
-spec(get_vm_memory_high_watermark/0 :: () -> float()).
-spec(set_vm_memory_high_watermark/1 :: (float()) -> 'ok').
+-spec(get_memory_limit/0 :: () -> non_neg_integer()).
-endif.
diff --git a/src/worker_pool.erl b/src/worker_pool.erl
index e4f260cc..456ff39f 100644
--- a/src/worker_pool.erl
+++ b/src/worker_pool.erl
@@ -41,6 +41,7 @@
-spec(submit/1 :: (fun (() -> A) | {atom(), atom(), [any()]}) -> A).
-spec(submit_async/1 ::
(fun (() -> any()) | {atom(), atom(), [any()]}) -> 'ok').
+-spec(idle/1 :: (any()) -> 'ok').
-endif.
diff --git a/src/worker_pool_sup.erl b/src/worker_pool_sup.erl
index 28c1adc6..d37c3a0f 100644
--- a/src/worker_pool_sup.erl
+++ b/src/worker_pool_sup.erl
@@ -26,8 +26,8 @@
-ifdef(use_specs).
--spec(start_link/0 :: () -> {'ok', pid()} | {'error', any()}).
--spec(start_link/1 :: (non_neg_integer()) -> {'ok', pid()} | {'error', any()}).
+-spec(start_link/0 :: () -> rabbit_types:ok_pid_or_error()).
+-spec(start_link/1 :: (non_neg_integer()) -> rabbit_types:ok_pid_or_error()).
-endif.