summaryrefslogtreecommitdiff
path: root/fml/lib/FML/Process
diff options
context:
space:
mode:
authorfukachan <fukachan>2006-02-04 06:45:53 +0000
committerfukachan <fukachan>2006-02-04 06:45:53 +0000
commit0cc6237b62e32b815dd26791e3ba6320b2b28eee (patch)
tree496dc81cf65b05e0f062a29bdecbfbca4465c9e9 /fml/lib/FML/Process
parent1dd7a482f114b57e9dc71e22be037988c7bb8c1f (diff)
downloadfml8-0cc6237b62e32b815dd26791e3ba6320b2b28eee.tar.gz
fml8-0cc6237b62e32b815dd26791e3ba6320b2b28eee.tar.bz2
fml8-0cc6237b62e32b815dd26791e3ba6320b2b28eee.zip
define several methods around $0 handling, address fault handling and
context switching. +set_process_title() +get_process_title() +set_address_fault() +get_address_fault() +is_address_fault() +set_address_fault_list() +get_address_fault_list() +context_switch_get_context() +context_switch_set_context()
Diffstat (limited to 'fml/lib/FML/Process')
-rw-r--r--fml/lib/FML/Process/Utils.pm151
1 files changed, 150 insertions, 1 deletions
diff --git a/fml/lib/FML/Process/Utils.pm b/fml/lib/FML/Process/Utils.pm
index e5ea2991..7d4a6bbe 100644
--- a/fml/lib/FML/Process/Utils.pm
+++ b/fml/lib/FML/Process/Utils.pm
@@ -4,7 +4,7 @@
# All rights reserved. This program is free software; you can
# redistribute it and/or modify it under the same terms as Perl itself.
#
-# $FML: Utils.pm,v 1.145 2006/01/13 00:17:08 fukachan Exp $
+# $FML: Utils.pm,v 1.146 2006/01/15 13:53:53 fukachan Exp $
#
package FML::Process::Utils;
@@ -253,6 +253,10 @@ sub incoming_message_set_current_queue
if (defined $pcb) {
$pcb->set("incoming_smtp_transaction", "queue_object", $queue);
}
+ else {
+ $curproc->logerror("no pcb");
+ return undef;
+ }
}
@@ -268,6 +272,10 @@ sub incoming_message_get_current_queue
if (defined $pcb) {
$pcb->get("incoming_smtp_transaction", "queue_object") || undef;
}
+ else {
+ $curproc->logerror("no pcb");
+ return undef;
+ }
}
@@ -2157,6 +2165,147 @@ sub dup_curproc_args
}
+# Descriptions: set process title (setproctitle()).
+# Arguments: OBJ($curproc) STR($title)
+# Side Effects: none
+# Return Value: none
+sub set_process_title
+{
+ my ($curproc, $title) = @_;
+ $0 = $title;
+}
+
+
+# Descriptions: return process title.
+# Arguments: OBJ($curproc)
+# Side Effects: none
+# Return Value: STR
+sub get_process_title
+{
+ my ($curproc) = @_;
+ return $0;
+}
+
+
+=head2 context_switch_get_context()
+
+return saved context information.
+
+=head2 context_switch_set_context($context)
+
+replace context information with the specified one.
+
+=cut
+
+
+# Descriptions: return saved context.
+# Arguments: OBJ($curproc)
+# Side Effects: none
+# Return Value: HASH_REF
+sub context_switch_get_context
+{
+ my ($curproc) = @_;
+ my $config = $curproc->config();
+ my $config_saved = $config->get_context();
+ my $pcb = $curproc->pcb();
+ my $pcb_saved = $pcb->get_context();
+ my $process_title = $curproc->get_process_title();
+ my $context = {
+ config_saved_context => $config_saved,
+ pcb_saved_context => $pcb_saved,
+ process_title => $process_title,
+ };
+
+ return $context;
+}
+
+
+# Descriptions: reset the context.
+# Arguments: OBJ($curproc) HASH_REF($context)
+# Side Effects: none
+# Return Value: STR
+sub context_switch_set_context
+{
+ my ($curproc, $context)= @_;
+ my $config = $curproc->config();
+ my $config_context = $context->{ config_saved_context };
+ my $pcb = $curproc->pcb();
+ my $pcb_context = $context->{ pcb_saved_context };
+ my $process_title = $context->{ process_title };
+
+ # context switch: back again.
+ $config->set_context($config_context);
+ $pcb->set_context($pcb_context);
+ $curproc->set_process_title($process_title);
+}
+
+
+=head1 FAULT
+
+=cut
+
+
+# Descriptions: set address fault.
+# Arguments: OBJ($curproc)
+# Side Effects: set shared memory
+# Return Value: none
+sub set_address_fault
+{
+ my ($curproc) = @_;
+ my $shm = $curproc->shared_hash_get("system", "fault");
+ $shm->{ "address_fault" } = "yes";
+}
+
+
+# Descriptions: get address fault value.
+# Arguments: OBJ($curproc)
+# Side Effects: none
+# Return Value: STR
+sub get_address_fault
+{
+ my ($curproc) = @_;
+ my $shm = $curproc->shared_hash_get("system", "fault");
+ return( $shm->{ "address_fault" } || 'no' );
+}
+
+
+# Descriptions: check if the address fault requested.
+# Arguments: OBJ($curproc)
+# Side Effects: none
+# Return Value: NUM
+sub is_address_fault
+{
+ my ($curproc) = @_;
+ my $is_fault = $curproc->get_address_fault();
+
+ return( $is_fault eq 'yes' ? 1 : 0 );
+}
+
+
+# Descriptions: set address fault list.
+# Arguments: OBJ($curproc) ARRAY_REF($list)
+# Side Effects: set shared memory
+# Return Value: none
+sub set_address_fault_list
+{
+ my ($curproc, $list) = @_;
+ my $shm = $curproc->shared_hash_get("system", "fault_list");
+ $shm->{ "address_fault_list" } = $list;
+}
+
+
+# Descriptions: get address fault list as ARRAY_REF.
+# Arguments: OBJ($curproc)
+# Side Effects: none
+# Return Value: ARRAY_REF
+sub get_address_fault_list
+{
+ my ($curproc) = @_;
+ my $shm = $curproc->shared_hash_get("system", "fault_list");
+ return( $shm->{ "address_fault_list" } || [] );
+}
+
+
=head1 LOG ROTATION
=head2 log_rorate()