Beh, vedendolo li solo soletto mi faceva pena
Non conosco a fondo la fork (preferisco i thread). Se non sbaglio dovrebbe duplicare l'intero processo server, giusto? In quel caso ( e a naso) mi sembra che se non rilasci il mutex prima che il figlio termini, all'esecuzione successiva il mutex si trovi già acquisito bloccando il tutto.
Per precauzione metterei la riga in rosso.
codice:
	while(1){
		if((new_sk=(accept(tcp_sk , (struct sockaddr *)&client , &size_sock))) < 0 ){

			perror("Error accept");
			exit(-1);
		}

		pthread_mutex_lock(&mutex_db);
		
		if((pid=fork())==0){
		
			close(tcp_sk);		
			printf("Client:%s\n",inet_ntoa(client.sin_addr));
			richiesta(new_sk);
			close(new_sk);
                        pthread_mutex_unlock(&mutex_db);
			exit(2); /* figlio termina */	
			
		}else{
			
			
			close(new_sk);		
			int va;
			wait(&va);
			pthread_mutex_unlock(&mutex_db);	
		}//if-else del fork