fix thread_dettach
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@2167 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
		
							
								
								
									
										3
									
								
								C/init.c
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								C/init.c
									
									
									
									
									
								
							@@ -1346,9 +1346,6 @@ InitVersion(void)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define K		((Int) 1024)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
Yap_InitWorkspace(int Heap, int Stack, int Trail, int max_table_size, 
 | 
					Yap_InitWorkspace(int Heap, int Stack, int Trail, int max_table_size, 
 | 
				
			||||||
                  int n_workers, int sch_loop, int delay_load)
 | 
					                  int n_workers, int sch_loop, int delay_load)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -384,10 +384,16 @@ p_thread_destroy(void)
 | 
				
			|||||||
static Int
 | 
					static Int
 | 
				
			||||||
p_thread_detach(void)
 | 
					p_thread_detach(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if (pthread_detach(ThreadHandle[IntegerOfTerm(Deref(ARG1))].handle) < 0) {
 | 
					  Int tid = IntegerOfTerm(Deref(ARG1));
 | 
				
			||||||
 | 
					  pthread_mutex_lock(&(ThreadHandle[tid].tlock));
 | 
				
			||||||
 | 
					  if (pthread_detach(ThreadHandle[tid].handle) < 0) {
 | 
				
			||||||
    /* ERROR */
 | 
					    /* ERROR */
 | 
				
			||||||
 | 
					    pthread_mutex_unlock(&(ThreadHandle[tid].tlock));
 | 
				
			||||||
    return FALSE;
 | 
					    return FALSE;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  ThreadHandle[tid].tdetach = 
 | 
				
			||||||
 | 
					    MkAtomTerm(AtomTrue);
 | 
				
			||||||
 | 
					  pthread_mutex_unlock(&(ThreadHandle[tid].tlock));
 | 
				
			||||||
  return TRUE;
 | 
					  return TRUE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,6 +55,8 @@ typedef	struct FREEB {
 | 
				
			|||||||
  struct FREEB		*b_next_size;
 | 
					  struct FREEB		*b_next_size;
 | 
				
			||||||
} BlockHeader;
 | 
					} BlockHeader;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define K		((Int) 1024)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MinBlockSize	(sizeof(BlockHeader)+sizeof(YAP_SEG_SIZE))
 | 
					#define MinBlockSize	(sizeof(BlockHeader)+sizeof(YAP_SEG_SIZE))
 | 
				
			||||||
#define MaxBlockSize	0xffffff
 | 
					#define MaxBlockSize	0xffffff
 | 
				
			||||||
#define	InUseFlag	0x80000000
 | 
					#define	InUseFlag	0x80000000
 | 
				
			||||||
@@ -138,4 +140,3 @@ void Yap_add_memory_hole(ADDR, ADDR);
 | 
				
			|||||||
#define SCRATCH_START_SIZE        (64*1024L)
 | 
					#define SCRATCH_START_SIZE        (64*1024L)
 | 
				
			||||||
#define SCRATCH_INC_SIZE          (64*1024L)
 | 
					#define SCRATCH_INC_SIZE          (64*1024L)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,8 +31,7 @@
 | 
				
			|||||||
	    dgraph_max_path/5,
 | 
						    dgraph_max_path/5,
 | 
				
			||||||
	    dgraph_min_paths/3,
 | 
						    dgraph_min_paths/3,
 | 
				
			||||||
	    dgraph_isomorphic/4,
 | 
						    dgraph_isomorphic/4,
 | 
				
			||||||
	    dgraph_path/3,
 | 
						    dgraph_path/3]).
 | 
				
			||||||
	    dgraph_connected_components]).
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
:- reexport(library(rbtrees),
 | 
					:- reexport(library(rbtrees),
 | 
				
			||||||
	[rb_new/1 as dgraph_new]).
 | 
						[rb_new/1 as dgraph_new]).
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,6 +18,7 @@
 | 
				
			|||||||
	    undgraph_neighbors/3,
 | 
						    undgraph_neighbors/3,
 | 
				
			||||||
	    undgraph_neighbours/3,
 | 
						    undgraph_neighbours/3,
 | 
				
			||||||
	    undgraph_complement/2,
 | 
						    undgraph_complement/2,
 | 
				
			||||||
 | 
						    undgraph_components/2,
 | 
				
			||||||
	    dgraph_to_undgraph/2,
 | 
						    dgraph_to_undgraph/2,
 | 
				
			||||||
	    undgraph_min_tree/2]).
 | 
						    undgraph_min_tree/2]).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -58,6 +59,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
:- use_module(library(rbtrees),
 | 
					:- use_module(library(rbtrees),
 | 
				
			||||||
	[  rb_delete/4,
 | 
						[  rb_delete/4,
 | 
				
			||||||
 | 
						   rb_insert/4,
 | 
				
			||||||
 | 
						   rb_in/3,
 | 
				
			||||||
	   rb_partial_map/4
 | 
						   rb_partial_map/4
 | 
				
			||||||
	]).
 | 
						]).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -160,4 +163,24 @@ undgraph_max_tree(G, T) :-
 | 
				
			|||||||
	wundgraph_max_tree(WG, WT, _),
 | 
						wundgraph_max_tree(WG, WT, _),
 | 
				
			||||||
	wundgraph_to_undgraph(WT, T).
 | 
						wundgraph_to_undgraph(WT, T).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					undgraph_components(Graph,[Map|Gs]) :-
 | 
				
			||||||
 | 
						pick_node(Graph,Node,Children,Graph1), !,
 | 
				
			||||||
 | 
						undgraph_new(Map0),
 | 
				
			||||||
 | 
						rb_insert(Map0, Node, Children, Map1),
 | 
				
			||||||
 | 
						expand_component(Children, Map1, Map, Graph1, NGraph),
 | 
				
			||||||
 | 
						undgraph_components(NGraph,Gs).
 | 
				
			||||||
 | 
					undgraph_components(_,[]).
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
					expand_component([], Map, Map, Graph, Graph).
 | 
				
			||||||
 | 
					expand_component([C|Children], Map1, Map, Graph1, NGraph) :-
 | 
				
			||||||
 | 
						rb_delete(Graph1, C, Edges, Graph2), !,
 | 
				
			||||||
 | 
						rb_insert(Map1, C, Edges, Map2),
 | 
				
			||||||
 | 
						expand_component(Children, Map2, Map3, Graph2, Graph3),
 | 
				
			||||||
 | 
						expand_component(Edges, Map3, Map, Graph3, NGraph).
 | 
				
			||||||
 | 
					expand_component([C|Children], Map1, Map, Graph1, NGraph) :-
 | 
				
			||||||
 | 
						expand_component(Children, Map1, Map, Graph3, NGraph).
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					pick_node(Graph,Node,Children,Graph1) :-
 | 
				
			||||||
 | 
						rb_in(Node,Children,Graph), !,
 | 
				
			||||||
 | 
						rb_delete(Graph, Node, Graph1).
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user