3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-22 00:26:38 +00:00
Commit graph

19593 commits

Author SHA1 Message Date
Mikulas Patocka a012953985 Add an option "ctrl_c" that can be used to disable Ctrl-C signal handling
Add this option, so that the z3 library can be used in programs that do
signal handling on their own.

Signed-off-by: Mikulas Patocka <mikulas@twibright.com>
2025-04-06 19:12:35 +02:00
Mikulas Patocka 95d90a7be5 Fix a race condition in scoped_timer::finalize
scoped_timer::finalize is called from fork. However, it may race with
other threads creating or freeing timer threads.

This patch reworks scoped_timer::finalize so that it runs only once
(there is no need to repeat it). We remove the assignments "num_workers =
0" and "available_workers.clear();" - they were done without any locks,
thus they were subjects to race condition.

The variable num_workers is deleted because it is not needed.

There was another bug in scoped_timer::finalize - if some workers were
busy, the function would spin-wait for them to terminate. This patch
changes it so that busy workers are ignored.

Signed-off-by: Mikulas Patocka <mikulas@twibright.com>
2025-04-06 19:11:29 +02:00
Mikulas Patocka a4e7bf82da Fix grabbing a mutex from a signal handler
There is this possible call trace:
        SIGINT signal
        on_sigint
        a->m_cancel_eh()
        cancel_eh::operator()
        m_obj.inc_cancel
        reslimit::inc_cancel
        lock_guard lock(*g_rlimit_mux);

Here we take a mutex from a signal - this is subject to deadlock (if the
signal interrupted another piece of code where the mutex is already
held).

To fix this race, we remove g_rlimit_mux and replace it with
signal_lock() and signal_unlock(). signal_lock and signal_unlock block
the signal before grabbing the mutex, so the signal can't interrupt a
piece of code where the mutex is held and the deadlock won't happen.

We change std::mutex to std::recursive_mutex, so that the mutex can be
grabbed multiple times by the same thread.

Signed-off-by: Mikulas Patocka <mikulas@twibright.com>
2025-04-06 19:11:04 +02:00
Mikulas Patocka 88eb4634d0 Fix a race condition between timer and Ctrl-C
In class cancel_eh, the operator () may be called concurrently by the
timer code and the Ctrl-C code, but the operator () accesses class'
members without any locking.

Fix this race condition by using the functions signal_lock() and
signal_unlock() that were introduced in a previous patch. Note that if
caller_id is CTRL_C_EH_CALLER, signal_lock was already called by the
caller.

Note that we must use signal_lock/signal_unlock and we must not grab any
other mutex, because the SIGINT signal could interrupt the code while the
mutex is held and cause deadlock.

Signed-off-by: Mikulas Patocka <mikulas@twibright.com>
2025-04-06 19:10:44 +02:00
Mikulas Patocka bb81f26fcb Make Ctrl-C handling thread-safe (#7603)
The Ctrl-C handling is not thread safe, there's a global variable g_obj
that is being accessed without any locking. The signal handlers are
per-process, not per-thread, so that different threads step over each
other's handlers. It is unpredictable in which thread the signal handler
runs, so the handler may race with the scoped_ctrl_c destructor.

Fix this by introducing the functions signal_lock and signal_unlock.
signal_lock blocks the SIGINT signal and then takes a mutex (so that the
signal handler can't be called while the mutex is held). signal_unlock
drops the mutex and restores the signal mask.

We protect all the global variables with signal_lock and signal_unlock.

Note that on Windows, the SIGINT handler is being run in a separate
thread (and there is no way how to block it), so we can use a simple
mutex to synchronize the signal handler with the other threads.

Signed-off-by: Mikulas Patocka <mikulas@twibright.com>
2025-04-06 19:10:19 +02:00
Nikolaj Bjorner 0b7a81b7c9 list[ExprRef] doesn't build for python 2025-04-05 14:45:52 -07:00
Nikolaj Bjorner 2b6055040b update agentz3 sample based on hugging face training/test data
https://huggingface.co/datasets/CardinalOperations/IndustryOR/blob/main/IndustryOR.json
2025-04-05 14:43:30 -07:00
Nikolaj Bjorner e7ff6009a0 #7605
add case for linux/risc64
2025-04-05 12:07:46 -07:00
Nikolaj Bjorner a39efbb008 fix #7607 2025-04-05 11:58:47 -07:00
Nikolaj Bjorner 9d8291a75b remove type annotation Context | None to ensure Centos ARM Build pass 2025-04-05 10:51:35 -07:00
Nikolaj Bjorner f607331856 type annotations across Python versions
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-04-04 22:14:32 -07:00
Nikolaj Bjorner bd2c7aa908 remove downlevel version incompatible elements of typing 2025-04-04 20:18:23 -07:00
Nikolaj Bjorner 305f1e8498 remove references to TypeGuard
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-04-04 19:41:50 -07:00
Nikolaj Bjorner a5048e4563 add initial sample agent use case 2025-04-04 18:40:15 -07:00
Nikolaj Bjorner 0a3719447e fix #7609 2025-04-04 18:40:15 -07:00
Nikolaj Bjorner 5e10fd39fc add selected type annotations to python API 2025-04-04 18:40:15 -07:00
Nikolaj Bjorner 26ab0de8fc rename function 2025-04-04 18:40:15 -07:00
Ammar Askar eb4e28d5d4
[z3.py] Fix incorrect call to _get_ctx in SeqMapI (#7610) 2025-04-04 15:54:32 -07:00
Josh Berdine 8d81a2dcaf
Note that Z3_get_numeral_small is essentially redundant (#7599)
* Check that Z3_get_numeral_small is given non-null out params

Analogous to other Z3_get_numeral_* functions with out params.

* Note that Z3_get_numeral_small is essentially redundant

The error behavior of Z3_get_numeral_small does not follow the pattern of
the other functions. The functions that have out params and return a bool
indicating success (such as Z3_get_numeral_rational_int64) return false
rather than signaling an error when given an unsupported expression
argument (such as a rounding mode value). The functions that do not have out
params signal an error in such cases. Z3_get_numeral_small is the odd one
out in that it signals errors and returns a status bool.

This error handling is the only difference between Z3_get_numeral_small and
Z3_get_numeral_rational_int64, so this patch adds a comment to the
documentation.
2025-03-29 10:02:32 -07:00
Josh Berdine 63ad2837e2
Add Z3_get_array_arity (#7598) 2025-03-28 14:42:51 -07:00
Josh Berdine 934455a24b
Remove vestiges of old ml api (#7597) 2025-03-27 16:41:31 -07:00
Lev Nachmanson e4897fff00 replace Exists by ForAll in the mathematica lemmas
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-03-27 12:32:37 -07:00
Lev Nachmanson 39df8999c8 enable shorterter mathematica printouts in nlsat
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-03-27 12:23:32 -07:00
Nikolaj Bjorner e86a918ae7 turn on ite simplification by default 2025-03-26 11:30:08 -07:00
Nikolaj Bjorner 8368094618 fix indentation 2025-03-25 21:27:38 -07:00
Nikolaj Bjorner 4fd6ba442a replace costly ite reduction by disjointnes check 2025-03-25 21:15:03 -07:00
Nikolaj Bjorner 392bc166a3 optimize bool rewriter 2025-03-25 14:07:52 -07:00
Nikolaj Bjorner 29712503a0 add option to rewrite ite value trees 2025-03-25 11:09:56 -07:00
Lev Nachmanson e92ccddb23 change line breaks 2025-03-24 15:38:57 -10:00
Lev Nachmanson 17bd02d1a3 change a comment 2025-03-24 15:29:19 -10:00
Nikolaj Bjorner 8bbe752d7d remove dead code
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-03-24 12:47:23 -07:00
Nikolaj Bjorner 7e4a1f246e fix crash in elim_constr2 2025-03-24 12:36:13 -07:00
Nikolaj Bjorner 93cf989b78 household chores - move to iterators 2025-03-24 12:36:13 -07:00
Lev Nachmanson dee3cf8de4 remove an unused field
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-03-24 07:44:13 -10:00
Lev Nachmanson 9302a02a81 reintroduce m_var_register, and avoid modulo gcd in normalize conflicts
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-03-24 07:44:13 -10:00
Nikolaj Bjorner 9a62ed5ab2 added some comments 2025-03-24 07:44:13 -10:00
Nikolaj Bjorner c634701b8f formatting
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-03-24 07:44:13 -10:00
Lev Nachmanson f073da9edd cleaning up the inner tightening code
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-03-24 07:44:13 -10:00
Lev Nachmanson 8c96178c0b avoid the variable mapping to m_ematrix and suppressing redundand constraints
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-03-24 07:44:13 -10:00
Nikolaj Bjorner 29c5c20267 use more descriptive functions than casting comparisons 2025-03-24 07:44:13 -10:00
Nikolaj Bjorner 7fb40e86eb tidy
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-03-24 07:44:13 -10:00
Nikolaj Bjorner a41bd38a3a use pattern of matching with undef instead of matching with conflict to reduce assumptions on procedure contracts
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-03-24 07:44:13 -10:00
Lev Nachmanson 676a536e9e fix a print out
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-03-24 07:44:13 -10:00
Lev Nachmanson d507d0fdb4 attempt to use the gcd of fixed vars
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-03-24 07:44:13 -10:00
Nikolaj Bjorner f181e3aa81 add comment on derivation of bound
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-03-24 07:44:13 -10:00
Lev Nachmanson dd19b381d8 detect more m_terms_to_tighten
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-03-24 07:44:13 -10:00
Lev Nachmanson 307af0fd97 remove an unused field
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-03-24 07:44:13 -10:00
Lev Nachmanson fc1c8c4cc4 add public access to bijection key_val iterator
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
2025-03-24 07:44:13 -10:00
Nikolaj Bjorner 8b5510bcd6 nit
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-03-24 07:44:13 -10:00
Nikolaj Bjorner 7577f6fea0 neatify loops
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
2025-03-24 07:44:13 -10:00