#define tkill(tid, sig) syscall (SYS_tkill, (tid), (sig))
+static void detach_checked (struct attach_state_struct *attach_state)
+{
+ pid_t pid = attach_state_pid_get (attach_state);
+
+ if (attach_state_stopped_get (attach_state) != 0)
+ {
+ STATE (pid, 1 << STATE_STOPPED);
+ detach (attach_state);
+ STATE (pid, 1 << STATE_STOPPED);
+ }
+ else
+ {
+ STATE (pid, (1 << STATE_PTRACED));
+ detach (attach_state);
+ STATE (pid, ((1 << STATE_SLEEPING) | (1 << STATE_RUNNING)));
+ }
+}
+
static volatile int spawned_threads_count; /* Set for the specific spawner. */
static struct attach_state_struct *attach_checked (pid_t pid, int redelivered_expect)
if (attach_state_threads_count_get (attach_state)
== spawned_threads_count)
break;
+ fprintf (stderr, "FIXME: Untested threads initialization - REMOVE.\n");
/* During the inferior's initialization we may catch less threads. */
assert (attach_state_threads_count_get (attach_state)
< spawned_threads_count);
/* WARNING: Currently we never use REDELIVERED_EXPECT but we would have to
probably reset it back to 0 otherwise. */
assert (redelivered_expect == 0);
+ detach_checked (attach_state);
}
while (loops++ < LOOPS_MIN || time (NULL) < timeout);
+ assert (attach_state_threads_count_get (attach_state) == spawned_threads_count);
/* FIXME: Why also STATE_STOPPED? */
STATE (pid, (1 << STATE_PTRACED) | (1 << STATE_STOPPED));
return attach_state;
}
-static void detach_checked (struct attach_state_struct *attach_state)
-{
- pid_t pid = attach_state_pid_get (attach_state);
-
- if (attach_state_stopped_get (attach_state) != 0)
- {
- STATE (pid, 1 << STATE_STOPPED);
- detach (attach_state);
- STATE (pid, 1 << STATE_STOPPED);
- }
- else
- {
- STATE (pid, (1 << STATE_PTRACED));
- detach (attach_state);
- STATE (pid, ((1 << STATE_SLEEPING) | (1 << STATE_RUNNING)));
- }
-}
-
struct registry
{
struct registry *next;